在pandas数据帧切片上的乘法

时间:2015-09-29 21:02:07

标签: python pandas

我有一个这样的数据框:

  Year       A_annex    Arnston     Bachelor         Berg   
  1955      1.625       0.940         NaN            NaN   
  1956      1.219       1.018         NaN            NaN   
  1957      2.090       1.20          NaN            1.190   
  1958      0.950       1.345         NaN            1.090

我希望将[1:,1:]中的所有内容乘以.404

我正在尝试的代码是:

df=pd.read_csv(r'H:\Sheyenne\Grazing Records\Master_AMU_complete.csv')
hectare=0.404
df=df.iloc[1:,1:]
df=df*hectare

但这会返回:

TypeError: Could not operate 0.404686 with block values can't multiply sequence by non-int of type 'float'

打印df.info()表示切片后的所有内容都是非空对象(如果有帮助的话)。

1 个答案:

答案 0 :(得分:2)

是的,这是有问题的价值。您可以通过函数找到这些有问题的值(感谢ajcr):

df = df.convert_objects(convert_numeric=True) 

首先将NaN转换为0,然后应用上面的函数,它返回NaN而不是有问题的值。因此,您必须找到具有NaN值的行并返回原始df的子集。

print df
   Year  A_annex Arnston  Bachelor  Berg
0  1955    1.625   0.940       NaN   NaN
1  1956    1.219   1.018       NaN   NaN
2  1957    2.090   1.20a       NaN  1.19
3  1958    0.950  1.345a       NaN  1.09

test = df.fillna(0)
test = test.convert_objects(convert_numeric=True)

   Year  A_annex  Arnston  Bachelor  Berg
0  1955    1.625    0.940         0  0.00
1  1956    1.219    1.018         0  0.00
2  1957    2.090      NaN         0  1.19
3  1958    0.950      NaN         0  1.09

test = df[test.isnull().any(axis=1)]

   Year  A_annex Arnston  Bachelor  Berg
2  1957     2.09   1.20a       NaN  1.19
3  1958     0.95  1.345a       NaN  1.09

hectare=0.404
df=df.iloc[1:,1:]
df=df*hectare
print df
相关问题