11

我的代码的以下行导致警告:

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

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

谢谢你的帮助。

4

1 回答 1

13

文档有点混乱。

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
于 2017-01-26T09:31:23.063 回答