为什么fillna对浮点值不起作用?

时间:2018-10-04 10:58:39

标签: python

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

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

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

为什么?

1 个答案:

答案 0 :(得分:2)

.fillna()适用于nan的列。 nan的概念不能出现在int列中。熊猫dtype int不支持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)

在熊猫中操纵dtype通常会引起痛苦,但这可能是解决此特定问题的较容易方法。