为了账号安全,请及时绑定邮箱和手机立即绑定

如何在熊猫数据帧中用前面的值替换NAN?

如何在熊猫数据帧中用前面的值替换NAN?

慕标5832272 2019-07-06 17:55:02
如何在熊猫数据帧中用前面的值替换NAN?假设我有一个DataFrameNaNs:>>> import pandas as pd>>> df = pd.DataFrame([[1, 2, 3], [4, None, None], [None, None, 9]])>>> df    0   1   20   1   2   31   4 NaN NaN2 NaN NaN   9我需要做的是替换每一个NaN第一个非-NaN值位于其上方的同一列中。假定第一行将永远不包含NaN..因此,对于前面的示例,结果将是   0  1  20  1  2  31  4  2  32  4  2  9我只需逐列遍历整个DataFrame,逐个元素并直接设置值,但是是否有一种简单(最优无循环)的方法来实现这一点?
查看完整描述

3 回答

?
侃侃无极

TA贡献2051条经验 获得超10个赞

你可以用fillna方法,并将方法指定为ffill(前填):

>>> df = pd.DataFrame([[1, 2, 3], [4, None, None], [None, None, 9]])>>> df.fillna(method='ffill')
   0  1  20  1  2  31  4  2  32  4  2  9

这种方法.。

将最后有效的观察向前传播到下一个有效的

往相反的方向走,也有一个bfill方法。

此方法不修改DataFrame的位置-您需要将返回的DataFrame重新绑定到一个变量,或者指定inplace=True:

df.fillna(method='ffill', inplace=True)




查看完整回答
反对 回复 2019-07-06
?
慕神8447489

TA贡献1780条经验 获得超1个赞

公认的答案是完美的。我有一个相关的,但略有不同的情况,我必须填补前进,但只在小组内。如果有人有同样的需求,请知道addna在DataFrameGroupBy对象上工作。


>>> example = pd.DataFrame({'number':[0,1,2,nan,4,nan,6,7,8,9],'name':list('aaabbbcccc')})

>>> example

  name  number

0    a     0.0

1    a     1.0

2    a     2.0

3    b     NaN

4    b     4.0

5    b     NaN

6    c     6.0

7    c     7.0

8    c     8.0

9    c     9.0

>>> example.groupby('name')['number'].fillna(method='ffill') # fill in row 5 but not row 3

0    0.0

1    1.0

2    2.0

3    NaN

4    4.0

5    4.0

6    6.0

7    7.0

8    8.0

9    9.0

Name: number, dtype: float64


查看完整回答
反对 回复 2019-07-06
?
侃侃尔雅

TA贡献1801条经验 获得超16个赞

你可以用pandas.DataFrame.fillna带着method='ffill'选择。'ffill'代表“向前填充”,并将传播最后有效的观察向前。另一种选择是'bfill'它的工作方式是一样的,但是向后。


import pandas as pd


df = pd.DataFrame([[1, 2, 3], [4, None, None], [None, None, 9]])

df = df.fillna(method='ffill')


print(df)

#   0  1  2

#0  1  2  3

#1  4  2  3

#2  4  2  9


查看完整回答
反对 回复 2019-07-06
  • 3 回答
  • 0 关注
  • 546 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信