使用iloc时在熊猫中的SettingWithCopyWarning

时间:2020-10-16 16:21:28

标签: python pandas

以下代码行给了我SettingWithCopyWarning。我已尝试按照与此主题相关的其他许多答案中的建议使用.copy(),但似乎无法警告我消失。导致错误的代码行是调用iloc的最后一行。但是我不明白为什么这应该是个问题。

import numpy as np
import pandas as pd

df=pd.DataFrame(np.arange(100), columns =['col1'])
df['col2']=df.loc[:,'col1'].diff()
df['col2'].iloc[0]=0

有人可以帮助我了解造成此警告的原因以及避免该警告的正确语法吗?

1 个答案:

答案 0 :(得分:0)

df['col2'].iloc[0]=0使用chained indexing,因此出现错误

  1. 您使用df['col2']索引一次
  2. 您第二次使用.loc[0]编制索引

这在大熊猫上被皱眉了(并且常常表现得很不直观)。相反,请考虑以下“正确”的方法来做同样的事情:

df.loc[0,'col2'] = 0
df.at[0,'col2'] = 0
df.iloc[0, df.columns.get_loc('col2')] = 0

或者考虑

df.fillna(0, inplace=True)