熊猫设置与复制警告

时间:2017-06-15 01:59:35

标签: python pandas

我正在尝试在pandas中切片数据帧并将其保存到另一个数据帧。假设df是现有数据框,我想将其中的某个部分切割为df1。但是,我收到了这个警告:

/usr/local/lib/python3.5/dist-packages/ipykernel_launcher.py:25: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame

我已经检查了SO中的各种帖子,讨论了类似的问题(其中两个是关注的):

  1. Setting with copy warning

  2. How to deal with SettingWithCopyWarning in Pandas?

  3. 通过这些链接,我能够在以下行找到问题

       Years=['2010','2011']
       for key in Years:
            df1['GG'][key]=df[key][df[key].Consumption_Category=='GG']
    

    然后我改为

       Years=['2010','2011']
       for key in Years:
            df1['GG'][key]=df[key].loc[df['2010'].iloc[:,0]=='GG']
    

    并躲开警告。

    然而,当我在此数据框中包含另一行删除某一列时,我再次收到警告,我无法将其删除。

       Years=['2010','2011']
       for key in Years:
            df1['GG'][key]=df[key].loc[df['2010'].iloc[:,0]=='GG']
            df1['GG'][key]=df1['GG'][key].drop(['Consumption_Category'],axis=1,inplace=True)
    

1 个答案:

答案 0 :(得分:1)

经过大量研究并通过熊猫文档后,我找到了问题的答案。我得到的警告是因为我已将inplace=True放入drop()函数中。因此,我删除了inplace=True并将结果保存到新的datafrmae中。现在我没有得到任何警告。

   Years=['2010','2011']
   for key in Years:
        df1['GG'][key]=df[key].loc[df['2010'].iloc[:,0]=='GG']
        df1['GG'][key]=df1['GG'][key].drop(['Consumption_Category'],axis=1)