【问题标题】:Reindexing provides values instead of NaN for missing values重新索引为缺失值提供值而不是 NaN
【发布时间】:2020-09-01 09:38:55
【问题描述】:

我想在缺少记录(或行)的情况下完成我的 % 湿度时间序列。传感器设计为每 15 分钟记录一次平均值,这就是我的目标频率。这是一个站点的示例(就差距而言不是最好的......),但我有 36 个测量站点、6 个参数和超过 24 000 条记录,每个都需要均质化。

例如,我选择日期时间和 % 湿度列:

humdt = data["la-salade"][["datetime","humidite"]]

               datetime  humidite
0   2019-07-09 08:30:00        87
1   2019-07-09 11:00:00        87
2   2019-07-09 17:30:00        82
3   2019-07-09 23:30:00        80
4   2019-07-11 06:15:00        79
5   2019-07-19 14:30:00        39

我将日期时间设置为索引:(到目前为止它有效)

humdt["datetime"] = pd.to_datetime(humdt["datetime"])
humdt = humdt.set_index("datetime",drop=True)

                     humidite
datetime
2019-07-09 08:30:00        87
2019-07-09 11:00:00        87
2019-07-09 17:30:00        82
2019-07-09 23:30:00        80
2019-07-11 06:15:00        79
2019-07-19 14:30:00        39

除此之外,我准备了一个符合我期望的日期时间范围(15 分钟的频率):

date_rng = pd.period_range(start=debut, end=fin, freq='15min').strftime('%Y-%m-%d %H:%M:%S')
date_rng = pd.DataFrame(date_rng)
date_rng.columns = ["datetime"]

然后,我使用这个范围来重新索引我的湿度值(预计缺失时为 NaN):

humdt = humdt.reindex(pd.DatetimeIndex(date_rng["datetime"]))

                     humidite
datetime
2019-07-09 08:30:00      87.0
2019-07-09 08:45:00      88.0
2019-07-09 09:00:00      88.0
2019-07-09 09:15:00      88.0
2019-07-09 09:30:00      89.0
2019-07-09 09:45:00      89.0
2019-07-09 10:00:00      88.0
2019-07-09 10:15:00      88.0
2019-07-09 10:30:00      88.0
2019-07-09 10:45:00      88.0
2019-07-09 11:00:00      87.0

因此,我不知从何处获得了湿度值……甚至没有经典的线性插值(例如:08H30 的 87% 和 11H00 的 87% 之间)。请帮帮我,我不知道发生了什么……(也尝试合并和重新采样,因为这里的行为不符合预期)。谢谢!

【问题讨论】:

  • 无法重现...在删除字符串和日期时间值之间的所有来回后,重新索引为所有新时间戳提供 NaN。
  • 感谢您试用 Serge!我也得到了这个问题(全部为 NaN)在预期的日期时间和值的数据帧之间进行合并。

标签: python pandas interpolation missing-data reindex


【解决方案1】:

您可以将属性fill_value 添加到df.reindex。

humdt = humdt.reindex(pd.DatetimeIndex(date_rng["datetime"]), fill_value=np.nan)

这将用 NaN 填充新值

【讨论】:

  • 谢谢阿巴斯。我尝试使用 fill_value=np.nan (认为它是默认属性,但总是更好地验证它!)但我得到了相同的结果>>> humdt = humdt.reindex(pd.DatetimeIndex(date_rng["datetime"]), fill_value=np.nan) >>> >>> >>> humdt humidite datetime 2019-07-09 08:30:00 87.0 2019-07-09 08:45:00 88.0 2019-07-09 09:00:00 88.0 2019-07-09 09:15:00 88.0 2019-07-09 09:30:00 89.0 2019-07-09 09:45:00 89.0 2019-07-09 10:00:00 88.0 2019-07-09 10:15:00 88.0
  • 这意味着它没有增加价值。它们已经存在于数据集中的某个位置。
  • 好的,谢谢您的帮助。我很困惑,因为我创建这个子数据框是为了只处理两列数据时间和一个参数。我不知道这些数据是关于什么的……我需要在其他地方获得具有一致频率、记录值和 NaN 的数据帧,但肯定没有任何方法有效。我想念一些东西。
猜你喜欢
  • 2017-08-18
  • 2021-06-17
  • 1970-01-01
  • 1970-01-01
  • 2021-08-06
  • 2020-10-14
  • 1970-01-01
  • 2023-01-02
  • 1970-01-01
相关资源
最近更新 更多