我有一个如下所示的时间序列:
from datetime import datetimedates = [datetime(2011, 1, 2), datetime(2011, 1, 5), datetime(2011, 1, 7), datetime(2011, 1, 8), datetime(2011, 1, 10), datetime(2011, 1, 12)]ts = pd.DataFrame({"a":np.random.randn(6),"b":np.random.randn(6)}, index=dates)ts.iloc[2,0]=np.nants.iloc[3,1]=np.nan
在许多情况下,我们需要将其转换为不含空值的numpy数组,并进行不同的处理,比如神经网络等…
ts.dropna().values
例如,假设通过numpy数组计算(聚类、神经网络等)生成了一个新的列c:
那么,将其添加到原始DataFrame中,最好是变成如下形式:
换句话说,在这个工作流程中:
1- 从pandas多特征时间序列DataFrame开始
2- 移除空值
3- 从步骤2中计算一个新的数组(分类、神经网络等)
4- 将步骤3中创建的数组添加到步骤1的原始DataFrame中(如何正确地做到这一点?)
我知道有些人可能会说我们可以整个过程都使用pandas,但假设表格变成三维的,我们需要将其转换为numpy数组。
谢谢!
回答:
尝试使用isna/notna
来掩盖你的数据,然后使用.loc
来重新赋值:
valids = ts.notna().all(axis=1)# 相当于 ts.dropna().valuesdata = ts[valids].to_numpy()# 进行处理preds = KMeans().fit_predict(data)# preds = [0, 0, 0, 1]# 重新赋值预测# 如果你的预测是2D的,如图所示,使用ravelvalids, 'pred'] = preds.ravel()