【问题标题】:Python Pandas fillna()Python 熊猫 fillna()
【发布时间】:2018-03-12 13:29:07
【问题描述】:

我有一个大型数据框,其值如下:

Name  A  B  C  D  E  F  G # Coulmns
Matt  1  n  n  n  5  n  5  # rows
Jake  n  n  2  n  3  n  n
Paul  2  n  3  n  n  8  n

我只想用前面的值填充 NA 值: 这是通过

实现的
df.fillna(method='ffill')

这是前向填充方法,它给我一个输出:

Name  A  B  C  D  E  F  G # Coulmns
Matt  1  1  1  1  5  5  5  # rows
Jake  n  n  2  2  3  3  3
Paul  2  2  3  3  3  8  8

问题是我不希望它走到最后,如果后面没有更多的值就停下来。请参阅第 2 行,杰克它必须在 E 处停止,因为它在最后一列中没有任何值。 期望的输出:

Name  A  B  C  D  E  F  G # Coulmns
Matt  1  1  1  1  5  5  5  # rows
Jake  n  n  2  2  3  n  n
Paul  2  2  3  3  8  8  n

有没有办法用熊猫做这个?

代码:

 for i in range(len(df)):
    df.loc[i][1:].fillna(method='ffill',inplace=True)

【问题讨论】:

  • 第一行Matt是否正确?
  • 抱歉,已编辑

标签: python python-3.x pandas dataframe missing-data


【解决方案1】:

我认为你需要:

  • set_index 第一栏
  • 用回填替换NaNs,并用isnull()检查NaNs
  • 用前向填充替换 NaN,用 mask 替换 NaNs
  • 最后一个reset_index 用于列索引

df = df.set_index('Name')
m = df.bfill(axis=1).isnull()
df = df.ffill(axis=1).mask(m)
print (df)
    Name    A    B    C    D    E    F    G
0    Matt  1.0  1.0  1.0  1.0  5.0  5.0  5.0
1    Jake  NaN  NaN  2.0  2.0  3.0  NaN  NaN
2    Paul  2.0  2.0  3.0  3.0  3.0  8.0  NaN

【讨论】:

  • 太棒了,谢谢!
猜你喜欢
  • 1970-01-01
  • 2015-10-20
  • 2021-09-26
  • 1970-01-01
  • 2017-01-04
  • 2022-01-25
  • 2016-11-03
  • 2020-06-06
相关资源
最近更新 更多