当 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
【讨论】:
我想知道ffill
和pad
有什么区别吗? bfill
和 backfill
呢以上是关于当 NaN [重复] 时用先前填充列值的主要内容,如果未能解决你的问题,请参考以下文章