为什么大型pandas数据帧在删除所选行后仅显示NaN值?

时间:2016-03-25 14:02:45

标签: python pandas dataframe

使用pandas库v.17.1,我试图从名为productDataNat的大型(882504行)数据框中删除行parName ==' rt',但是然后所有其他行变为NaN

productDataNat = pd.read_csv('https://lobianco.org/temp/productData_P0-Mi-Ei.csv',sep=';',  dtype={'value': np.float64})
productDataNat = productDataNat.drop(['Unnamed: 8'],axis=1)
productDataNat.set_index(['scen','country','region','prod','freeDim','year','parName'], inplace=True)
productDataNat.head()

out1

productDataNat.drop('rt', level='parName', axis=0)

enter image description here

当我使用示例数据帧时,它按预期工作:

midx = pd.MultiIndex(levels=[['one', 'two'], ['x','y']], labels=[[1,1,1,0],[1,0,1,0]])
dfmix = pd.DataFrame({'A' : [1, 2, 3, 4], 'B': [5, 6, 7, 8]}, index=midx)
dfmix

enter image description here

dfmix.drop('x',level=1,axis=0)

enter image description here

pandas中的Bug或者我的数据框出错了什么?(

1 个答案:

答案 0 :(得分:0)

校正: 它对我来说完全相同(我使用Pandas v0.18.0):

In [4]: df.drop('rt', level='parName', axis=0)
Out[4]:
                                                          value
scen     country region prod        freeDim year parName
P0-Mi-Ei 11000   11042  hardWRoundW NaN     2005 dl         NaN
                        softWRoundW NaN     2005 dl         NaN
                        pulpWFuelW  NaN     2005 dl         NaN
                        ashRoundW   NaN     2005 dl         NaN
                        fuelW       NaN     2005 dl         NaN
                        hardWSawnW  NaN     2005 dl         NaN
                        softWSawnW  NaN     2005 dl         NaN
                        plyW        NaN     2005 dl         NaN
                        pulpW       NaN     2005 dl         NaN
                        pannels     NaN     2005 dl         NaN
                        ashSawnW    NaN     2005 dl         NaN
                        ashPlyW     NaN     2005 dl         NaN
                 11061  hardWRoundW NaN     2005 dl         NaN
                        softWRoundW NaN     2005 dl         NaN
                        pulpWFuelW  NaN     2005 dl         NaN
                        ashRoundW   NaN     2005 dl         NaN
                        fuelW       NaN     2005 dl         NaN
                        hardWSawnW  NaN     2005 dl         NaN
                        softWSawnW  NaN     2005 dl         NaN
                        plyW        NaN     2005 dl         NaN
                        pulpW       NaN     2005 dl         NaN
                        pannels     NaN     2005 dl         NaN
                        ashSawnW    NaN     2005 dl         NaN
                        ashPlyW     NaN     2005 dl         NaN
                 11072  hardWRoundW NaN     2005 dl         NaN
                        softWRoundW NaN     2005 dl         NaN
                        pulpWFuelW  NaN     2005 dl         NaN
                        ashRoundW   NaN     2005 dl         NaN
                        fuelW       NaN     2005 dl         NaN
                        hardWSawnW  NaN     2005 dl         NaN

作为一种解决方法,您可以在设置multiindex之前删除rt

cols = 'scen;parName;country;region;prod;freeDim;year;value'.split(';')
url = 'https://lobianco.org/temp/productData_P0-Mi-Ei.csv'
productDataNat = pd.read_csv(url, sep=';', dtype={'value': np.float64}, usecols=cols)

df = productDataNat.ix[productDataNat.parName != 'rt']

df.set_index(['scen','country','region','prod','freeDim','year','parName'], inplace=True)