我对熊猫很新,并且在一大段代码中得到了臭名昭着的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
当我运行这个时,我收到警告:
main:1:SettingWithCopyWarning:尝试在DataFrame的切片副本上设置值。尝试使用.loc [row_indexer,col_indexer] = value
奇怪的是,如果我放弃“df”线,它会在没有警告的情况下运行。这是预期的行为吗?
通常,如果我想通过各列的值过滤DataFrame,我是否需要执行copy()以避免SettingWithCopyWarning?
非常感谢
假设您的DataFrame如下所示,这将避免使用SettingWithCopyWarning
有一个熊猫开发者Jeff建议的github Discussion和解决方案:)
df
A B
1 3 3
最好用这种方式。
df1['B'] = df['B'].replace(3, 10)
df1
A B
1 3 10