df.loc 导致 SettingWithCopyWarning 警告消息
df.loc causes a SettingWithCopyWarning warning message
我的以下代码行导致警告:
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)
验证这一点。您收到警告是因为您正在尝试分配给此副本。
warning/documentation 告诉您首先应该如何构建 df
。既然它是一个副本,你应该如何分配它。
df = some_other_df[cols]
将制作 df
some_other_df
的副本。警告建议改为这样做
df = some_other_df.loc[:, [cols]]
既然已经完成,如果您选择忽略此警告,您可以
df = df.copy()
或
df.is_copy = None
我的以下代码行导致警告:
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)
验证这一点。您收到警告是因为您正在尝试分配给此副本。
warning/documentation 告诉您首先应该如何构建 df
。既然它是一个副本,你应该如何分配它。
df = some_other_df[cols]
将制作 df
some_other_df
的副本。警告建议改为这样做
df = some_other_df.loc[:, [cols]]
既然已经完成,如果您选择忽略此警告,您可以
df = df.copy()
或
df.is_copy = None