Python : Merging/joining PCA 转换后的数据帧结果为 NAN

Python : Merging/joining Dataframe after PCA transform results in NAN

import pickle
import numpy as np 
import pandas as pd
from sklearn.externals import joblib
from sklearn.decomposition import PCA
PCA = joblib.load('pcawithstandard.pkl')

with open('collist.pickle', 'rb') as handle:
    collist = pickle.load(handle)

for chunk in pd.read_csv('fortest.csv', chunksize = 5):

    _transformed = chunk[collist]
    _transformed = PCA.transform(_transformed)
    _transformed = pd.DataFrame(data=_transformed)

    _tempdata = chunk[['X__1']].join(_transformed)
    print(_tempdata)

我有几个大数据集,有 30k 列,行的范围从 10k-40k 我正在尝试使用我制作的先前安装的 PCA 转换数据集,然后根据单个数据帧的索引将其与行标签 'X_1' 连接起来。

因为这是一个大数据集,所以我决定使用 chunksize,这样我就可以限制每次使用的内存量。

连接适用于第一组块,但后续块只会导致我的数据帧的正确部分成为 NAN。

我已经检查过包含转换后数据的数据框,它确实包含值。

我没有加入转换后的数据,而是尝试加入未转换的数据,它似乎有效,所以我不知道发生了什么。

我怀疑 PCA 转换改变了我的数据帧的结构,导致它无法正确连接。

未转换的数据混合了 int64float64 dtypes 列,并存储为 object

转换后的数据列都是 float64 并且也存储为 object

未触及的块数据具有对象 float64int64 并且也存储为 object

我在 Python 3.6.4,我的模块版本是:

numpy (1.16.1)
pandas (0.24.1)
scikit-learn (0.20.2)

感谢我能得到的任何帮助和意见。

提前致谢!

由于您在 index 列上执行 join,因此您能够成功地完成第一个块。 但是对于所有后续块,PCA 分解会重新生成 index,因此原始块和分解后的块的索引不匹配。

您可以在分解之前对每个进行 reset_index,您应该能够将其加入原始列:

_transformed = chunk[collist].reset_index(drop=True)

已添加 drop=True 以更新答案。 :)