首页 文章

在DataFrame中设置切片副本上的值

提问于
浏览
14

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

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 的新列,其中包含我希望它包含的内容,但我也收到警告消息:

正在尝试在DataFrame的切片副本上设置值 . 尝试使用.loc [row_indexer,col_indexer] = value而不是查看文档中的警告:http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy

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

1 回答

  • 33

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

    您可以通过执行从x创建正确的 dataframe

    x = x.copy()
    

    这将删除警告,但它是 not the proper way

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

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

相关问题