python - 将 NaN 转换为 DataFrame 中的数字时出现 TyperError

标签 python pandas dataframe types nan

我有一个如下所示的 DataFrame df,我正在尝试转换 ending_price 中存在 NaN 的所有情况列变成 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' 不支持输入类型,并且无法根据转换将输入安全地强制为任何支持的类型规则“安全” 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)

最佳答案

使用 Pandas' fillna()方法代替。根据您的情况,您可以写:

df['closing_price'].fillna(100)

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

<小时/>

您看到的错误是由具有object 数据类型的“close_price”列导致的。 np.isnan 需要一个浮点值数组。为了解决这个问题,您可以使用

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

...然后照常使用您的方法(尽管我仍然喜欢 fillna())。

关于python - 将 NaN 转换为 DataFrame 中的数字时出现 TyperError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31303433/

相关文章:

python - 如何使用用于创建子帧的相同 groupby 调用在数据帧的子帧上应用 groupby

python - 如何对混合类型数据实现 Pandas GroupBy 过滤器?

python - Seaborn Restore 标记边缘

python - Django Heroku 错误 "Your models have changes that are not yet reflected in a migration"

python - python 中嵌套列的加法

python - 从笛卡尔乘积创建 pandas MultiIndex 但 "Unfold"以相同的方式创建多个级别

python - 如何将这种形式的字典更改为 pandas 数据框?

python - 使用urllib在Python 3.5中获取网页的最终重定向

python - serializer.is_valid 与 Many=True

r - 在使用 R 进行 PCA 分析之前省略 NA 和数据插补