Python Scikit学习数据分析问题

Python Scikit学习数据分析问题,python,python-3.x,scikit-learn,pca,Python,Python 3.x,Scikit Learn,Pca,我正在尝试获取一个包含大约90000条数据线的两个变量(波长和强度)的.dat文件,并对其应用sklearn.pca过滤器 以下是一小部分数据: wavelength intensity [um] [W/m**2/um/sr] 196.078431372549 1.108370393265022E-003 192.307692307692 1.163428008597600E-003 188.679245

我正在尝试获取一个包含大约90000条数据线的两个变量(波长和强度)的.dat文件,并对其应用sklearn.pca过滤器

以下是一小部分数据:

wavelength                intensity
   [um]                 [W/m**2/um/sr]
196.078431372549       1.108370393265022E-003
192.307692307692       1.163428008597600E-003
188.679245283019       1.223639983609668E-003
下面是我用来分析数据的代码

pca= PCA(n_components=2)
pca.fit(data)
print(pca.components_)
当我尝试将2个pca组件应用于其中一个数据集时,得到的错误代码如下:

ValueError: Datatype coercion is not allowed

如果您能提供任何帮助,我们将不胜感激。

我认为您的问题在于列名,尤其是
[W/m**2/um/sr]

此外,在使用PCA时,不要忘记使用
StandardScaler
将输入变量重新缩放为“可比较”单位

import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA

data = pd.DataFrame({'wavelength [um]': [196.078431372549, 1.108370393265022E-003, 192.307692307692], 'intensity [W/m**2/um/sr]': [1.163428008597600E-003, 188.679245283019, 1.223639983609668E-003]})

scaler = StandardScaler(with_mean=True, with_std=True)
pca= PCA(n_components=2)
pca.fit(scaler.fit_transform(data))
print(pca.components_)
对我来说效果很好。也许您只需要指定:

data.columns = data.columns.astype(str)

请您提供一个?那么,对于您创建的数据变量,是否可以将其设置为数组而不是列出每个值?@domryan“而不是列出每个值”是什么意思?您确实可以将PCA的主成分(即“新变量”)存储在一个数组中,并将其用于进一步分析。(如果有帮助,不要忘记验证响应。)