我尝试在数据集的所有空白单元格中替换该列的平均值。
我使用modifiedData=data.fillna(data.mean())
,但仅适用于整数列类型。
我还有一个带有浮点值的列,其中fillna
不起作用。
为什么?
答案 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通常会引起痛苦,但这可能是解决此特定问题的较容易方法。