我正在尝试对pandas数据帧的特定部分执行一些操作。为此,我希望获得我的数据帧的视图,将其保存在变量中并使用变量(以便不必每次都重新计算视图)。到目前为止我的代码:
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:尝试在a的副本上设置值 从DataFrame切片。尝试使用.loc [row_indexer,col_indexer] = 代替值
请参阅文档中的警告: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
答案 0 :(得分:0)
我通过不采用原始数据帧的一部分来解决我的问题,但是通过从中获取一组索引来解决我的问题,对于迷你示例:
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
给出了理想的结果,我可以想象有更好的解决方案,但它不再是完全可怕的。