Pandas,如何保存变量中的复杂视图

2024-06-08 08:33:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试对熊猫数据帧的特定部分执行一些操作。为此,我想获得一个dataframe视图,将其保存在一个变量中并使用该变量(这样就不必每次都重新计算视图)。到目前为止我的代码是:

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 value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_indexer,col_indexer] = value instead

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy


Tags: 代码视图true警告dataframedftemploc
1条回答
网友
1楼 · 发布于 2024-06-08 08:33:23

我解决问题的方法不是从原始数据帧中提取一部分,而是从中获取一组索引,例如:

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

如果能达到预期的效果,我可以想象会有更好的解决方案,但现在已经不是完全可怕了。你知道吗

相关问题 更多 >