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 转换改变了我的数据帧的结构,导致它无法正确连接。
未转换的数据混合了 int64
和 float64
dtypes 列,并存储为 object
转换后的数据列都是 float64
并且也存储为 object
未触及的块数据具有对象 float64
和 int64
并且也存储为 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
以更新答案。 :)
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 转换改变了我的数据帧的结构,导致它无法正确连接。
未转换的数据混合了 int64
和 float64
dtypes 列,并存储为 object
转换后的数据列都是 float64
并且也存储为 object
未触及的块数据具有对象 float64
和 int64
并且也存储为 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
以更新答案。 :)