当前位置: 首页 > 面试题库 >

Fillna在Python Pandas中的多列中

燕航
2023-03-14
问题内容

我有一个混合类型的pandas dataFrame,有些是字符串,有些是数字。我想用“。”替换字符串列中的NAN值,并用0替换浮点数列中的NAN值。

考虑这个小的虚拟示例:

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]})

现在,我可以分为三行:

df['Name'].fillna('.',inplace=True)
df['City'].fillna('.',inplace=True)
df.fillna(0,inplace=True)

由于这是一个很小的数据帧,因此3行可能没问题。在我的真实示例中(由于数据机密性原因,在此无法共享),我还有更多的字符串列和数字列。所以我最终只为fillna写了很多行。有一种简洁的方法吗?


问题答案:

你可以使用apply你的列有检查dtype它是否是numeric或不检查dtype.kind

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


 类似资料:
  • 问题内容: 我正在尝试使用具有相似列值的行来估算值。 例如,我有这个数据框 我想使用相似的列[‘one’]和[‘two’]的键,并且如果列[‘three’]并非完全是nan,则从具有相似的键的行中插值[ ‘3’] 这是我的愿望结果 您会看到键1和3不包含任何值,因为现有值不存在。 我试过使用groupby fillna() 这给了我一个错误。 我尝试了正向填充,这给了我一个相当奇怪的结果,那就是它

  • 问题内容: 假设我有一个代表位置的类。位置“属于”客户。位置由Unicode 10个字符代码标识。对于特定客户,“位置代码”在位置之间应该唯一。 因此,如果我有两个客户,客户“ 123”和客户“ 456”。它们都可以有一个称为“ main”的位置,但都不能有两个称为main的位置。 我可以在业务逻辑中处理此问题,但是我想确保没有办法轻松地在sqlalchemy中添加需求。unique = True

  • 问题内容: 我正在尝试使用以下代码在pandas数据框中按索引号删除多列(数据集中的第2列和第70列,分别索引为1和69): 我收到以下错误: 在我的代码中,[1,69]突出显示并说: 下面的代码完成了我希望它成功完成的工作,但是在两行重复的代码上(首先删除col索引69,然后删除1,顺序很重要,因为删除之前的列会更改后面的列的索引)。我以为我可以简单地将多个列索引指定为一个列表,但是上面我可能有

  • 例如,我的mapper.xml文件中有以下xml片段: 如您所见,with订阅只有一列 我想传递2列给它,因此得到的代码,我们怎么做?

  • 我在用Cassandra存储股票信息。每个“行”都有一些基字段,如:时间、价格、关闭、打开、低、高等。在这些字段的顶部,我有一个浮动类型的值列表,其中包含一些内部系统计算。 对象的示例:

  • 我需要在一个表中添加多个列,但将这些列放在一个名为的列之后。 我试过这个: 我得到这个错误: 您的SQL语法有错误;查看与您的MySQL服务器版本相对应的手册,以了解在'后面第7行的')处使用的正确语法 如何在这样的查询中使用AFTER?