>我有一个数据集,它有一个日期时间索引,我正在使用sklearn的PCA来减少维度的数量。
以下问题困扰着我 - PCA 是否会保留系列中点的顺序,以便我可以重用原始数据帧中的索引?
df = pd.DataFrame(...)
df2 = pca.fit_transform(df)
df2.index = df.index
此外,有没有比这样做更好(更安全)的方法?
虽然 PCA 删除了索引,但行的基本顺序仍然存在(请参阅 PCA* 的转换函数的实现)。所以让 df2.index = df1.index 是安全的
*fit_transform 与拟合然后变换相同。它们都不会对行重新排序。
此外,有没有比这样做更好(更安全)的方法?
你所做的是安全的。但更简洁的方法是将输出包装在DataFrame
或Series
中,并提供原始索引。在您的示例中:
df = pd.DataFrame(...)
df2 = pd.DataFrame(pca.fit_transform(df), index=df.index)
这在处理sci-kit learn模型中的预测向量(np.ndarrays)时非常有用:
y_pred = pd.Series(clf.predict(X_train), index=X_train.index)
当您有一个更复杂的索引(如 MultiIndex
)时,这一点很重要。