Панды, как сохранить сложный вид в переменной - PullRequest
0 голосов
/ 01 июня 2018

Я пытаюсь выполнить некоторые манипуляции с определенной частью кадра данных панд.Для этой цели я хотел бы получить представление о моем фрейме данных, сохранить его в переменной и работать с этой переменной (чтобы не приходилось каждый раз пересчитывать представление).Мой код на данный момент:

spikes.loc[(stims.at[i, 'StimOnset'] <= spikes['SpikeTimes']) & (spikes['SpikeTimes'] <= stims.at[i, 'StimOffset']), 'StimPeriod'] = True
temp = spikes.loc[(stims.at[i, 'StimOnset'] <= spikes['SpikeTimes']) & (spikes['SpikeTimes'] <= stims.at[i, 'StimOffset'])]
temp['StimPeriod'] = True

(извините, что это так долго, я не понимаю, почему это не должно работать, поэтому я позаботился о том, чтобы не включать все).Таким образом, первая строка выполняет необходимые вычисления, а две следующие - нет, и они также выдают предупреждение.Теперь я мог бы использовать стиль первой строки для нескольких вычислений, но это не кажется эффективным.Есть ли способ обойти это, чтобы сохранить желаемое представление в переменной?

Пример минимального кода для создания этого эффекта:

d = {'A': [1,3,5,7], 'B': [2,4,6,8]}
df = pd.DataFrame(data=d)
df.loc[(3 <= df['A']) & (df['A'] <= 5), 'A'] = 0
print df
df = pd.DataFrame(data=d)
temp = df.loc[(3 <= df['A']) & (df['A'] <= 5)]
temp['A'] = 0
print df

первая часть производит желаемый эффект,второй нет.Предупреждение выглядит следующим образом:

/ usr / local / lib / python2.7 / dist-packages / ipykernel_launcher.py: 8: SettingWithCopyWarning: значение пытается быть установлено для копиисрез из DataFrame.Попробуйте вместо этого использовать .loc [row_indexer, col_indexer] = значение

См. Предостережения в документации: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy

1 Ответ

0 голосов
/ 01 июня 2018

Я решил свою проблему, не взяв часть исходного кадра данных, а получив из него набор индексов, для мини-примера:

d = {'A': [1,3,5,7], 'B': [2,4,6,8]}
df = pd.DataFrame(data=d)
temp = (df.loc[:,'A'] >= 3) & (df.loc[:,'A'] <= 5)
df.loc[temp,'A'] = 0
print df

дает желаемый результат, я мог бы представить тамэто лучшие решения, но это уже не совсем ужасно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...