在DataFrame的片段副本上設置值

2024-06-01 22:36:21 发布

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

我有一个小数据框,比如说:

    Mass32      Mass44  
12  0.576703    0.496159
13  0.576658    0.495832
14  0.576703    0.495398    
15  0.576587    0.494786
16  0.576616    0.494473
...

我想要列Mass32的滚动平均值,所以我这样做:

x['Mass32s'] = pandas.rolling_mean(x.Mass32, 5).shift(-2)

它的工作原理与我有一个名为Mass32s的新列一样,该列包含我希望它包含的内容,但我也会收到警告消息:

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 the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy

我想知道是否有更好的方法,尤其是避免收到这个警告信息。


Tags: the数据警告pandasshiftvaluemean平均值
1条回答
网友
1楼 · 发布于 2024-06-01 22:36:21

出现此警告是因为数据帧x是切片的副本。这不容易知道为什么,但这与你是如何达到目前的状态有关。

您可以通过执行以下操作从x中创建适当的dataframe

x = x.copy()

这将删除警告,但它不是正确的方式

如警告所示,您应该使用DataFrame.loc方法,如下所示:

x.loc[:,'Mass32s'] = pandas.rolling_mean(x.Mass32, 5).shift(-2)

相关问题 更多 >