当 NaN [重复] 时用先前填充列值

Posted

技术标签:

【中文标题】当 NaN [重复] 时用先前填充列值【英文标题】:Populating the column value with previous when NaN [duplicate] 【发布时间】:2018-04-13 08:28:47 【问题描述】:

我有一个pd.Series,看起来像这样:

>>> series
0     This is a foo bar something...
1                                NaN
2                                NaN
3        foo bar indeed something...
4                                NaN
5                                NaN
6               foo your bar self...
7                                NaN
8                                NaN

如何使用系列中先前的非 NaN 值填充 NaN 列值?

我试过这个:

new_column = []

for row in list(series):
    if type(row) == str:
        new_column.append(row)
    else:
        new_column.append(new_column[-1])

series = pd.Series(new_column)

但是在pandas 中还有其他方法可以做到这一点吗?

【问题讨论】:

查看fillna(填充) 非常感谢您指向ffill 是的,这是一个骗局,所以没有将其发布为答案:) 你有没有链接到骗子? 给你:***.com/questions/27905295/… 【参考方案1】:

来自docs:

DataFrame.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs)

...

方法 : ‘backfill’, ‘bfill’, ‘pad’, ‘ffill’, None,默认无

用于填充重新索引系列垫/填充中的孔的方法:将最后一个有效观察向前传播到下一个有效回填/bfill:使用下一个有效观察来填充间隙

所以:

series.fillna(method='ffill')

一些解释:

ffill/pad:前向填充是使用上一行中不是 NA 的值并填充 NA 值。 pad 只是 ffill 的详细别名。

bfill/backfill:回填是使用下一行中不是 NA 的值来填充 NA 值。 backfill 只是 bfill 的详细别名。

在代码中

>>> import pandas as pd
>>> import numpy as np
>>> np.NaN
nan

>>> series = pd.Series([np.NaN, 'abc', np.NaN, np.NaN, 'def', np.NaN, np.NaN])

>>> series
0    NaN
1    abc
2    NaN
3    NaN
4    def
5    NaN
6    NaN
dtype: object

>>> series.fillna(method='ffill')
0    NaN
1    abc
2    abc
3    abc
4    def
5    def
6    def
dtype: object

>>> series.fillna(method='bfill')
0    abc
1    abc
2    def
3    def
4    def
5    NaN
6    NaN
dtype: object

【讨论】:

我想知道ffillpad有什么区别吗? bfillbackfill

以上是关于当 NaN [重复] 时用先前填充列值的主要内容,如果未能解决你的问题,请参考以下文章

无法用所有列中的列值填充缺失值

ms 根据先前记录的日期访问自动填充日期字段

Python Pandas - 用前一列的值向前填充整行

合并 Pandas 数据框中的 2 列,用前一个值填充 NaN [重复]

在R中迭代地用先前的值填充NA行[重复]

删除 NaN 和列值更改之间的行