我对熊猫还很陌生,并且在一大段代码中获得了臭名昭著的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?
非常感谢
答案 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