首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python中多列的Fillna

Python中多列的Fillna
EN

Stack Overflow用户
提问于 2016-01-21 01:00:25
回答 9查看 90.5K关注 0票数 56

我有一只混合类型的熊猫dataFrame,有些是字符串,有些是数字。我希望将字符串列中的NAN值替换为“.”,而浮动列中的NAN值替换为0。

考虑一下这个虚构的小例子:

代码语言:javascript
复制
df = pd.DataFrame({'Name':['Jack','Sue',pd.np.nan,'Bob','Alice','John'],
    'A': [1, 2.1, pd.np.nan, 4.7, 5.6, 6.8],
    'B': [.25, pd.np.nan, pd.np.nan, 4, 12.2, 14.4],
    'City':['Seattle','SF','LA','OC',pd.np.nan,pd.np.nan]})

现在,我可以做三行:

代码语言:javascript
复制
df['Name'].fillna('.',inplace=True)
df['City'].fillna('.',inplace=True)
df.fillna(0,inplace=True)

由于这是一个小数据,3行可能是可以的。在我的实际示例中(由于数据保密的原因,我不能在这里共享),我有更多的字符串列和数字列。因此,我最终写了许多行只是为了填充。有简明扼要的方法吗?

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2016-01-21 06:21:56

您可以将apply用于您的列,并检查dtype是否为numeric,方法是检查dtype.kind

代码语言:javascript
复制
res = df.apply(lambda x: x.fillna(0) if x.dtype.kind in 'biufc' else x.fillna('.'))

print(res)
     A      B     City   Name
0  1.0   0.25  Seattle   Jack
1  2.1   0.00       SF    Sue
2  0.0   0.00       LA      .
3  4.7   4.00       OC    Bob
4  5.6  12.20        .  Alice
5  6.8  14.40        .   John
票数 55
EN

Stack Overflow用户

发布于 2018-08-02 13:27:28

在寻找这个问题的答案时看到了这个页面,但是不喜欢现有的答案。最后,我在DataFrame.fillna文档中找到了更好的东西,并认为我会为发生这种情况的任何人做出贡献。

如果您有多个列,但只想替换其中一个子集中的NaN,则可以使用:

代码语言:javascript
复制
df.fillna({'Name':'.', 'City':'.'}, inplace=True)

这还允许您为每一列指定不同的替换。如果您想继续填充所有剩余的NaN值,只需在最后抛出另一个fillna

代码语言:javascript
复制
df.fillna({'Name':'.', 'City':'.'}, inplace=True).fillna(0, inplace=True)

编辑(2021年4月22日)

功能(大概/显然)从最初的post开始更改,您不能再链接2 inplace fillna()操作了。您仍然可以链接,但是现在必须将该链分配给,而不是就地修改,例如:

代码语言:javascript
复制
df = df.fillna({'Name':'.', 'City':'.'}).fillna(0)
票数 77
EN

Stack Overflow用户

发布于 2016-01-21 01:17:13

您可以手动列出字符串列,也可以从df.dtypes中收集它们。一旦您有了字符串/对象列的列表,就可以一次对所有这些列调用fillna

代码语言:javascript
复制
# str_cols = ['Name','City']
str_cols = df.columns[df.dtypes==object]
df[str_cols] = df[str_cols].fillna('.')
df = df.fillna(0)
票数 26
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34913590

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档