2017-06-15 37 views
0

我想切片在熊猫数据框,并将其保存到另一个数据框。假设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?

通过这些链接,我是ab乐找到下面的行

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

最后,经过大量的研究,并通过熊猫文档,我找到了我的问题的答案。我得到的警告是因为我已将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)