在 pandas 数据帧中使用前向和后向填充填充缺失值(ffill 和 bfill)
Posted
技术标签:
【中文标题】在 pandas 数据帧中使用前向和后向填充填充缺失值(ffill 和 bfill)【英文标题】:Filling missing values using forward and backward fill in pandas dataframe (ffill and bfill) 【发布时间】:2017-01-11 11:11:15 【问题描述】:熊猫数据框的初学者。我在下面有这个数据集,其中缺少 A 列和 B 列(Test.csv)的值:
DateTime A B
01-01-2017 03:27
01-01-2017 03:28
01-01-2017 03:29 0.18127718 -0.178835737
01-01-2017 03:30 0.186923018 -0.183260853
01-01-2017 03:31
01-01-2017 03:32
01-01-2017 03:33 0.18127718 -0.178835737
我可以使用这段代码通过前向传播来填充值,但这只会填充 03:31 和 03:32,而不是 03:27 和 03:28。
import pandas as pd
import numpy as np
df = pd.read_csv('test.csv', index_col = 0)
data = df.fillna(method='ffill')
ndata = data.to_csv('test1.csv')
结果:
DateTime A B
01-01-2017 03:27
01-01-2017 03:28
01-01-2017 03:29 0.18127718 -0.178835737
01-01-2017 03:30 0.186923018 -0.183260853
01-01-2017 03:31 0.186923018 -0.183260853
01-01-2017 03:32 0.186923018 -0.183260853
01-01-2017 03:33 0.18127718 -0.178835737
如何包含“Bfill”以使用回填填充 03:27 和 03:28 的缺失值?
【问题讨论】:
你试过data = df.fillna(method='bfill')
吗?甚至data = df.bfill()
?
【参考方案1】:
如果需要,可以使用ffill
和bfill
替换NaN
值向前和向后填充:
print (df)
A B
DateTime
01-01-2017 03:27 NaN NaN
01-01-2017 03:28 NaN NaN
01-01-2017 03:29 0.181277 -0.178836
01-01-2017 03:30 0.186923 -0.183261
01-01-2017 03:31 NaN NaN
01-01-2017 03:32 NaN NaN
01-01-2017 03:33 0.181277 -0.178836
data = df.ffill().bfill()
print (data)
A B
DateTime
01-01-2017 03:27 0.181277 -0.178836
01-01-2017 03:28 0.181277 -0.178836
01-01-2017 03:29 0.181277 -0.178836
01-01-2017 03:30 0.186923 -0.183261
01-01-2017 03:31 0.186923 -0.183261
01-01-2017 03:32 0.186923 -0.183261
01-01-2017 03:33 0.181277 -0.178836
与带参数的函数fillna
相同:
data = df.fillna(method='ffill').fillna(method='bfill')
【讨论】:
请记住,调用 ffill 和 bfill 的顺序必须适合您的用例。以上是关于在 pandas 数据帧中使用前向和后向填充填充缺失值(ffill 和 bfill)的主要内容,如果未能解决你的问题,请参考以下文章