【发布时间】:2018-03-18 03:18:14
【问题描述】:
有没有更好的方法从 pandas 数据框中的时间序列数据中删除插值数据?
我有一个时间序列数据,其中缺失值用插值填充,但我想删除插值数据,然后再次用 np.nan 值替换。
输入数据:
Index Column_one Column_two
2017:10:03 03:44:00 13.61504936 14.65000057
2017:10:03 03:45:00 13.61504936 14.65000057
2017:10:03 03:46:00 13.61504936 14.65000057
2017:10:03 03:47:00 13.61504936 np.nan
2017:10:03 03:48:00 13.60000038 np.nan
2017:10:03 03:49:00 np.nan np.nan
2017:10:03 03:50:00 np.nan np.nan
2017:10:03 03:51:00 np.nan np.nan
2017:10:03 03:52:00 np.nan 14.80000019
2017:10:03 03:53:00 np.nan 14.80000019
2017:10:03 03:54:00 14.21253681 14.80000019
2017:10:03 03:55:00 14.24253273 14.80000019
所有缺失值都用插值填充
data_interpolated = data.interpolate()
插值数据:
Index Column_one Column_two
2017:10:03 03:44:00 13.61504936 14.65000057
2017:10:03 03:45:00 13.61504936 14.65000057
2017:10:03 03:46:00 13.61504936 14.65000057
2017:10:03 03:47:00 13.61504936 14.67500051
2017:10:03 03:48:00 13.60000038 14.70000044
2017:10:03 03:49:00 13.70208979 14.72500038
2017:10:03 03:50:00 13.80417919 14.75000032
2017:10:03 03:51:00 13.9062686 14.77500025
2017:10:03 03:52:00 14.008358 14.80000019
2017:10:03 03:53:00 14.11044741 14.80000019
2017:10:03 03:54:00 14.21253681 14.80000019
2017:10:03 03:55:00 14.24253273 14.80000019
现在我想删除插值并获取初始数据集。
所需的输出:
Index Column_one Column_two
2017:10:03 03:44:00 13.61504936 14.65000057
2017:10:03 03:45:00 13.61504936 14.65000057
2017:10:03 03:46:00 13.61504936 14.65000057
2017:10:03 03:47:00 13.61504936 np.nan
2017:10:03 03:48:00 13.60000038 np.nan
2017:10:03 03:49:00 np.nan np.nan
2017:10:03 03:50:00 np.nan np.nan
2017:10:03 03:51:00 np.nan np.nan
2017:10:03 03:52:00 np.nan 14.80000019
2017:10:03 03:53:00 np.nan 14.80000019
2017:10:03 03:54:00 14.21253681 14.80000019
2017:10:03 03:55:00 14.24253273 14.80000019
如果有什么好的方法可以在 Pandas 或 Numpy 中实现,请告诉我?
【问题讨论】:
-
抱歉,缺失值是如何填写的?你能不能不首先填写它们是我的问题。如果没有原始 df 的副本,回到原始 df 是一个非常重要的问题,您如何判断数据是否以线性方式合法增加而不是被插值?
-
@EdChum 缺失值是通过线性插值技术填充的,所以所有填充值都是线性递增的。我得到的数据实际上是插值数据,我想得到原始数据集。所以基本上我想删除所有以线性方式增加或减少的数据点(这可能会删除原始df中也具有线性关系的数据)
-
也许您可以添加一个计算差异的列,然后搜索差异为线性的区域(
| [i] - [i-1] | < 0.03或类似的东西)并将这些值替换为np.nan
标签: python python-3.x numpy time-series interpolation