熊猫数据框切片警告的副本

时间:2018-11-14 04:53:39

标签: python pandas

我对熊猫还很陌生,并且在一大段代码中获得了臭名昭著的SettingWithCopyWarning。我将其归结为以下内容:

import pandas as pd
df = pd.DataFrame([[0,3],[3,3],[3,1],[1,1]], columns=list('AB'))
df
df = df.loc[(df.A>1) & (df.B>1)]
df['B'] = 10

运行此命令时,我得到警告:

主要:1:SettingWithCopyWarning: 试图在DataFrame的切片副本上设置一个值。 尝试改用.loc [row_indexer,col_indexer] =值

奇怪的是,如果我离开“ df”行,它将在没有警告的情况下运行。这是预期的行为吗?

通常,如果我想通过各个列中的值来过滤DataFrame,是否需要执行copy()来避免SettingWithCopyWarning?

非常感谢

1 个答案:

答案 0 :(得分:0)

从问题中假设您的DataFrame如下所示,这样可以避免SettingWithCopyWarning

其中一名熊猫开发者Jeff :)提出了github Discussion和解决方案

df
   A  B
1  3  3

最好使用这种方式。

df1['B'] = df['B'].replace(3, 10)
df1
   A   B
1  3  10