python 时间序列中的缺失值

新手上路,请多包涵

我有一个时间序列数据框,该数据框很大并且在 2 列(“湿度”和“压力”)中包含一些缺失值。我想以一种巧妙的方式来估算这些缺失值,例如使用最近邻居的值或前后时间戳的平均值。有没有简单的方法可以做到这一点?我试过 fancyimpute 但数据集包含大约 180000 个示例并给出内存错误 在此处输入图像描述

原文由 Marco 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 422
2 个回答

考虑 interpolate系列- DataFrame )。此示例显示如何用直线填充任意大小的间隙:

 df = pd.DataFrame({'date': pd.date_range(start='2013-01-01', periods=10, freq='H'), 'value': range(10)})
df.loc[2:3, 'value'] = np.nan
df.loc[6, 'value'] = np.nan
df
                 date  value
0 2013-01-01 00:00:00    0.0
1 2013-01-01 01:00:00    1.0
2 2013-01-01 02:00:00    NaN
3 2013-01-01 03:00:00    NaN
4 2013-01-01 04:00:00    4.0
5 2013-01-01 05:00:00    5.0
6 2013-01-01 06:00:00    NaN
7 2013-01-01 07:00:00    7.0
8 2013-01-01 08:00:00    8.0
9 2013-01-01 09:00:00    9.0

df['value'].interpolate(method='linear', inplace=True)
                 date  value
0 2013-01-01 00:00:00    0.0
1 2013-01-01 01:00:00    1.0
2 2013-01-01 02:00:00    2.0
3 2013-01-01 03:00:00    3.0
4 2013-01-01 04:00:00    4.0
5 2013-01-01 05:00:00    5.0
6 2013-01-01 06:00:00    6.0
7 2013-01-01 07:00:00    7.0
8 2013-01-01 08:00:00    8.0
9 2013-01-01 09:00:00    9.0

原文由 Peter Leimbigler 发布,翻译遵循 CC BY-SA 4.0 许可协议

插值和滤波器:

由于是时间序列问题,出于解释目的,我将在答案中使用 o/p 图形图像:

考虑我们有如下时间序列数据:(在 x 轴上 = 天数,y = 数量)

 pdDataFrame.set_index('Dates')['QUANTITY'].plot(figsize = (16,6))

在此处输入图像描述

我们可以看到时间序列中有一些 NaN 数据。 nan 的百分比 = 总数据的 19.400%。现在我们要估算 null/nan 值。

我将尝试向您展示用于填充数据中的 Nan 值的 interpolate 和 filna 方法的 o/p。

插值():

首先我们将使用插值:

 pdDataFrame.set_index('Dates')['QUANTITY'].interpolate(method='linear').plot(figsize = (16,6))

在此处输入图像描述

注意:这里插值没有时间方法

fillna() 与回填方法

pdDataFrame.set_index('Dates')['QUANTITY'].fillna(value=None, method='backfill', axis=None, limit=None, downcast=None).plot(figsize = (16,6))

在此处输入图像描述

fillna() 与回填方法 & limit = 7

限制:这是向前/向后填充的连续 NaN 值的最大数量。换句话说,如果有超过这个连续 NaN 数的间隙,它只会被部分填充。

 pdDataFrame.set_index('Dates')['QUANTITY'].fillna(value=None, method='backfill', axis=None, limit=7, downcast=None).plot(figsize = (16,6))

在此处输入图像描述

我发现 fillna 函数更有用。但是您可以使用任何一种方法来填充两列中的 nan 值。

有关这些功能的更多详细信息,请参阅以下链接:

  1. 菲尔纳: https ://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.fillna.html#pandas.Series.fillna
  2. https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.interpolate.html

还有一个 Lib: impyute 您可以查看。有关此库的更多详细信息,请参阅此链接: https ://pypi.org/project/impyute/

原文由 Yogesh Awdhut Gadade 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题