【发布时间】:2019-05-15 10:11:52
【问题描述】:
我有一个包含多列的 DataFrame,每列包含不同索引位置的 NaN 值。索引是 5 分钟频率的日期时间。
取第一列:选择直到第一个 NaN 行之前的行,或者如果相邻的 NaN 值彼此跟随,则选择直到第一个 NaN 范围。
我想从值序列中预测 NaN 值或 NaN 值。
下一次迭代:选择行(从头开始)直到下一个 NaN 值或 NaN 相邻范围,并选择 NaN 值/范围。预测 NaN 值/范围。
一直持续到该列不包含 NaN。
import pandas as pd
import numpy as np
column = ['values']
data = [1,2,3,4, np.nan, 6, 7, 8, np.nan, np.nan, np.nan, 12, 13, 14, np.nan, np.nan, 17, 18]
DateList_ = pd.date_range(start='2018-10-29 10:00:00', end='2018-10-29 11:25:00 ', freq='5T')
df_ = pd.DataFrame(data=data, columns=column, index=DateList_)
第一次迭代:values = [1,2,3,4], nan_periods=1 -> 根据值预测 [5]
第二次迭代:values = [1,2,3,4,5,6,7,8] nan_periods=3 -> 根据值预测 [9,10,11]
第三次迭代:值 = [1,2,3,4,5,6,7,8,9,10,11,12,13,14] -> 根据值预测 [15,16]
迭代停止,不再有 NaN 值。
预测是通过 Prophet 完成的。我想在选择部分寻求一些帮助,以迭代选择包含值的行,以及以下 nan/s。
很遗憾,我不能使用插值!我拥有的真实序列要复杂得多,而不是像这个虚拟示例那样是线性的!本示例仅用于演示选择!
【问题讨论】:
-
Please address the solution I asked... 你问的实际上是线性插值。如果您想要其他插值方法或应用程序,则必须更具体... -
我编辑了帖子以表明不能使用插值。
-
男人!序列不是线性的!这只是一个虚拟的例子,真正的问题是如何选择值,以及迭代的nan范围!
-
如果要查找 NaN 或后续 NaN 的位置,可以使用
df_['values'].isna().astype(int).diff().gt(0)之类的内容。您必须执行相同操作才能获取这些后续值结束的索引。你肯定会在 SO 中找到类似的东西 -
你做的和 df_['values'].isnull() 一样...