【问题标题】:Keep pandas index while applying sklearn应用 sklearn 时保持 pandas 索引
【发布时间】:2017-06-18 07:09:17
【问题描述】:

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

以下问题困扰着我 - PCA 会保持我系列中点的顺序,以便我可以重用原始数据帧中的索引吗?

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

此外,有没有比这样做更好(更安全)的方法?

【问题讨论】:

  • 也许重新索引会有所帮助 - pca.fit_transform(df).reindex(index=df.index)?
  • 我在做什么有什么不同吗?
  • 不太可能。这将摆脱不必要的索引轴重新分配。

标签: pandas scikit-learn


【解决方案1】:

此外,有没有比这样做更好(更安全)的方法?

您所做的是安全的。但是cleaner 的方法是将输出包装在DataFrameSeries 中并提供原始索引。在您的示例中:

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

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

y_pred = pd.Series(clf.predict(X_train), index=X_train.index)

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

【讨论】:

    【解决方案2】:

    虽然索引已被 PCA 删除,但行的底层顺序仍然存在(请参阅 PCA* 的转换函数的实现)。所以 df2.index = df1.index

    是安全的

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-13
      • 1970-01-01
      • 2019-10-31
      • 1970-01-01
      • 1970-01-01
      • 2018-09-22
      • 2012-08-12
      相关资源
      最近更新 更多