我有一个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)
答案 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()
)。