Sum*_*ana 5 python python-3.x pandas
category使用这里和这里的解决方案在我的所有列中填充空值后,我的许多浮点列中都留下了许多空值。我认为一个简单的方法df.fillna(0.0, inplace = True)会起作用,但是,我收到了错误ValueError: fill value must be in categories。我认为此错误仅适用于category类型列。
所以,
我有许多浮动列和许多类别列。我通过添加类别“未知”然后用“未知”填充空值来填充类别列。现在,一个简单的
df.fillna(0.0, inplace = True)
Run Code Online (Sandbox Code Playgroud)
应该有效。但是,事实并非如此。
重现此问题的简单方法如下:
df = pd.DataFrame({"A": ["a"], "B":[np.nan] })
df['A'] = df['A'].astype('category')
df.fillna(0.0, inplace = True)
Run Code Online (Sandbox Code Playgroud)
请不要说我能做到:
df['A'].fillna(0.0, inplace = True)
Run Code Online (Sandbox Code Playgroud)
我有很多浮动列,我不能一一去。我必须批量填充剩余列中的所有空值 0.0。请放心,所有列都是浮点类型,但是,可能还有额外的category列,但是,它们没有任何空值。
欣赏任何解决方案。
这里的主要问题是 pandas 不允许我们用不在类别级别中的NaN值替换 a 中的值。category例如,如果您尝试df.fillna('a')它就会起作用,因为“a”存在于类别级别中。有趣的是,即使列NaN中没有category,pandas 也会引发 a ValueError(也许是一个错误?)。因此,您必须指定目标列或目标dtype列才能填充NaN。
也就是说,您可以轻松地NaN在尽可能多的浮动列中替换:
df.fillna({col: 0.0 for col in df.columns[df.dtypes.eq(float)]})
Run Code Online (Sandbox Code Playgroud)
或者
df.loc[:, df.dtypes.eq(float)] = df.select_dtypes(float).fillna(0.0)
Run Code Online (Sandbox Code Playgroud)
或者,您可以只填写NaN除类别之外的所有列:
df.loc[:, df.dtypes.ne('category')] = df.select_dtypes(exclude='category').fillna(0.0)
Run Code Online (Sandbox Code Playgroud)
更新:
显然,已经提出了一个悬而未决的问题。看一下: https: //github.com/pandas-dev/pandas/issues/24079。
| 归档时间: |
|
| 查看次数: |
212 次 |
| 最近记录: |