Python 用不同的方法填充缺失数据

Python 用不同的方法填充缺失数据,python,pandas,Python,Pandas,我有两组带有时间戳、值和质量标志的数据。某些时间戳缺少value和quality标志,需要根据周围的数据进行填充。即 如果包含NaN数据的有效数据上的质量标志不同,则将值和质量标志设置为与包含最高质量标志的行相同。在下面的示例中,第一组NAN将替换为qf=3和value=3 如果质量标志相同,则在两侧的两个有效值之间插入该值。在该示例中,第二组NAN将被qf=1、v=6和9替换 代码: 我试图通过找到NA行并循环通过它们来解决这个问题,修复第一个标准,然后使用插值来解决第二个标准。然而,这是

我有两组带有时间戳、值和质量标志的数据。某些时间戳缺少value和quality标志,需要根据周围的数据进行填充。即

  • 如果包含NaN数据的有效数据上的质量标志不同,则将值和质量标志设置为与包含最高质量标志的行相同。在下面的示例中,第一组NAN将替换为qf=3和value=3
  • 如果质量标志相同,则在两侧的两个有效值之间插入该值。在该示例中,第二组NAN将被qf=1、v=6和9替换
代码:


我试图通过找到NA行并循环通过它们来解决这个问题,修复第一个标准,然后使用插值来解决第二个标准。然而,这是真的很慢,因为我与一个大集工作

一种方法就是做所有可能的填充,然后根据需要在其中进行选择。如果需要,在执行
df=df.astype(float)
之后(您的示例使用字符串
“NaN”
),类似这样的操作应该可以:

is_null = df.qf.isnull()
fill_down = df.ffill()
fill_up = df.bfill()

df.loc[is_null & (fill_down.qf > fill_up.qf)] = fill_down
df.loc[is_null & (fill_down.qf < fill_up.qf)] = fill_up
df = df.interpolate()
is_null=df.qf.isnull()
填充=df.ffill()
填充=df.bfill()
df.loc[is_null&(fill_down.qf>fill_up.qf)]=fill_down
df.loc[is_null&(fill_down.qf
它做的工作比需要的多,但是很容易看到它在做什么,它做的工作是矢量化的,所以发生得很快。在您的数据集扩展到约10万行(具有相同的空值密度)的版本上,在我的旧笔记本上需要约6秒。根据您的要求,这可能就足够了

is_null = df.qf.isnull()
fill_down = df.ffill()
fill_up = df.bfill()

df.loc[is_null & (fill_down.qf > fill_up.qf)] = fill_down
df.loc[is_null & (fill_down.qf < fill_up.qf)] = fill_up
df = df.interpolate()