【问题标题】:Populating the column value with previous when NaN [duplicate]当 NaN [重复] 时用先前填充列值
【发布时间】: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
  • 是的,这是一个骗局,所以没有将其发布为答案:)
  • 你有没有链接到骗子?

标签: python string list pandas dataframe


【解决方案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
猜你喜欢
  • 2018-03-28
  • 2021-04-30
  • 2017-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-20
  • 2022-07-22
  • 1970-01-01
相关资源
最近更新 更多