当使用列子集时,pandas SettingWithCopyWarning

2024-05-15 00:45:39 发布

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

我试图了解熊猫在设置copywarning时,究竟是什么触发了它,以及如何避免它。我想从一个数据框中选取一组列,然后使用这组列。我需要填充缺少的值,并用1替换所有大于1的值。在

我知道sub_df=df[['col1','col2','col3']]会产生一个副本,这似乎是我想要的。有人能解释一下为什么在这里触发复制警告,是否是问题,以及我应该如何避免它?在

我读了很多关于链式作业的文章,我在这里做这个吗?在

data={'col1' : [25 , 0, 100, None],
    'col2' : [50 , 0 , 0, None],
      'col3' : [None, None, None, 100],
      'col4' : [ 20 , 20 , 20 , 20 ],
      'col5' : [1,1,2,3]}
df= pd.DataFrame(data)
sub_df=df[['col1', 'col2', 'col3']]
sub_df.fillna(0, inplace=True)
sub_df[df>1]=1 # produces the copy warning
sub_df

真正让我困惑的是,如果我没有为我的列子集使用新名称,为什么不会触发此警告,如下所示:

^{pr2}$

谢谢!在


Tags: 数据none警告dfdata作业文章副本
1条回答
网友
1楼 · 发布于 2024-05-15 00:45:39

您的两个代码片段在语义上是不同的,第一个代码片段是不明确的,您是要对视图还是原始df的副本进行操作;第二个代码片段用df的子集覆盖{},因此没有歧义。在

如果要对副本进行操作,请执行以下操作:

sub_df=df[['col1', 'col2', 'col3']].copy()

如果您想对视图进行操作,那么我建议使用col列表并使用新的indexers引用它们,如下所示:

^{pr2}$

然后呢

df.loc[df > 1, col_list] = 1

相关问题 更多 >

    热门问题