python - df.loc 导致 SettingWithCopyWarning 警告消息

标签 python pandas chained-assignment

我的以下代码行会引发警告:

import pandas as pd

s = pd.DataFrame(np.random.randint(0,100,size=(100, 4)), columns=list('ABCD'))
s.loc[-1] = [5,np.nan,np.nan,6]
grouped = s.groupby(['A'])
for key_m, group_m in grouped:
    group_m.loc[-1] = [10,np.nan,np.nan,10]

C:\Anaconda3\lib\site-packages\ipykernel\__main__.py:10: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame

根据documentation这是推荐的做法,那么发生了什么?

感谢您的帮助。

最佳答案

文档有点困惑。

您的dataframe 是另一个dataframe 的副本。您可以通过运行 bool(df.is_copy) 来验证这一点。您收到警告是因为您正在尝试分配给此副本。

警告/文档告诉您应该如何首先构造 df。既然它是一个副本,您应该如何分配它。

df = some_other_df[cols]

将使 df 成为 some_other_df 的副本。警告建议改为这样做

df = some_other_df.loc[:, [cols]]

既然已经完成了,如果你选择忽略这个警告,你可以

df = df.copy()

df.is_copy = None

关于python - df.loc 导致 SettingWithCopyWarning 警告消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41870108/

相关文章:

python - 当运行locust --master和client locust --master-host时,locust不能运行api压力,为什么?

python - 如果两列中的名称使用正则表达式匹配,则创建返回 true/false 的新列

python - 如何使用 flask-sqlalchemy 将区分大小写的字符串插入 Mysql?

python - Df header : Insert a full year of header rows at end of month and fill non populated months with zero

python - Pandas :链式作业

python - 如何向现有 DataFrame 添加新列?

python - InvalidArgumentError(回溯见上): indices[1] = 10 is not in [0, 10)

python - Pandas 在 groupby 中返回空组

python - 从现有数据框创建新数据框 - SettingWithCopyWarning

python - 如何使用相关 DataFrame 中的位置值形成 `JSON`?