应用sklearn时保持pandas索引

时间:2017-02-01 13:50:11

标签: pandas scikit-learn

我有一个数据集,它有一个DateTime索引,我正在使用sklearn的PCA来减少维数。

以下问题让我感到困惑 - PCA会保留系列中各点的顺序,以便我可以重用原始数据框中的索引吗?

df = pd.DataFrame(...)
df2 = pca.fit_transform(df)
df2.index = df.index

此外,还有比这更好(更安全)的方法吗?

2 个答案:

答案 0 :(得分:0)

虽然PCA删除了索引,但行的基本顺序仍然存在(请参阅PCA *的转换函数的实现)。因此,使用df2.index = df1.index

是安全的

* fit_transform与fit相同然后变换。他们都没有对行重新排序。

答案 1 :(得分:0)

此外,还有比这更好(更安全)的方法吗?

您所做的是安全的。但是 cleaner 的一种实现方法是将输出包装在$data = [ 'title' => $title, 'name' => $name, 'date' => $date ]; $db->table('mytable')->insert($data); DataFrame中并提供原始索引。在您的示例中:

Series

这在处理sci-kit学习模型中的预测向量(np.ndarrays)时非常有用:

df = pd.DataFrame(...)
df2 = pd.DataFrame(pca.fit_transform(df), index=df.index)

当您拥有更复杂的索引(例如MultiIndex)时,这一点很重要。