微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – 从DataFrame设置切片副本的值

参见英文答案 > How to deal with SettingWithCopyWarning in Pandas?                                    13个
我有一个小数据帧,比如说这个:

    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:
07001

我想知道是否有更好的方法来做到这一点,特别是避免收到此警告信息.

解决方法:

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

您可以通过执行从x创建正确的数据帧

x = x.copy()

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐