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

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/

10-12 23:12
查看更多