在 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】:

如果需要,可以使用ffillbfill 替换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)的主要内容,如果未能解决你的问题,请参考以下文章

什么是神经网络中的前向和后向传播?

前向链接与后向链接

elmo模型

CuDNN简介

Pandas:使用日期时间索引进行分组前向填充

Pandas 通过插入源数据帧中的数据来填充新数据帧