将NaN'转换为DataFrame中的数字时的TyperError

时间:2015-07-08 20:49:10

标签: python pandas dataframe types nan

我有一个DataFrame df,如下所示,我试图将NaN列中closing_price的所有情况转换为100.

   maturity_dt              pay_freq_cd   coupon closing_price FACE_VALUE  
0   2017-06-30 00:00:00.0           2    0.625      99.96875        100   
1   2015-07-15 00:00:00.0           2      1.6         99.47        100   
2   2018-06-15 00:00:00.0           2    1.125      100.3906        100   
3   2015-07-13 00:00:00.0           2      2.1           NaN        100 

我尝试使用下面的代码执行此操作,但我在行TypeError: ufunc 'isnan' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe'' 中收到错误price_array = np.where(np.isnan(price_array), 100, price_array)

price_array = df['closing_price'].values
price_array = np.where(np.isnan(price_array), 100, price_array)

1 个答案:

答案 0 :(得分:2)

请改用Pandas的fillna()方法。在你的情况下,你可以写:

df['closing_price'].fillna(100)

这会将'closing_price'列中的NaN值替换为值100. Pandas会正确处理不同的数据类型。 (请记住将新列分配回DataFrame或使用inplace=True。)

您看到的错误是'closing_price'列具有object数据类型的结果。 np.isnan需要一个浮点值数组。要解决此问题,可以使用

将列转换为浮动类型
df['closing_price'] = df['closing_price'].astype(float)

...然后正常使用您的方法(虽然我仍然赞成fillna())。