首页 > 解决方案 > 为什么 fillna 不适用于浮点值?

问题描述

我尝试在数据集的所有空单元格中替换该列的平均值。

我用modifiedData=data.fillna(data.mean())

但它仅适用于整数列类型。我还有一个带有浮点值的列,但它fillna不起作用。

为什么?

标签: python

解决方案


.fillna()适用于nan. nan不能存在于int列中的概念。Pandas dtypeint不支持nan. 如果您有一列似乎是整数,则它更有可能是一个对象列。也许甚至充满了字符串。在某些情况下为空的字符串。

空字符串不填充.fillna()

In [8]: pd.Series(["2", "1", ""]).fillna(0)
Out[8]: 
0    2
1    1
2     
dtype: object

弄清楚发生了什么的一个简单方法是使用该df.Column.isna()方法。

如果那个方法给你所有False。你知道没有nan可填的。

将空字符串转换为nan

In [11]: s = pd.Series(["2", "1", ""])
In [12]: empty_string_mask = s.str.len() == 0
In [21]: s.loc[empty_string_mask] = float('nan')
In [22]: s
Out[22]: 
0      2
1      1
2    NaN
dtype: object

之后你可以fillna

In [23]: s.fillna(0)
Out[23]: 
0    2
1    1
2    0
dtype: object

解决此问题的另一种方法是检查 dtype

df.column.dtype

如果它说它'object'确认了您的问题

您可以将该列转换为浮动列

df.column = df.column.dtype(float)

虽然在 pandas 中操作 dtypes 通常会导致痛苦,但这可能是解决这个特定问题的更简单的方法。


推荐阅读