使用sklearn PCA执行fit时出现'could not convert string to float'报错求助
PCA拟合报错:"could not convert string to float"
运行代码
import pandas as pd from sklearn.decomposition import PCA from sklearn.cluster import KMeans data = pd.read_csv("tfidf_smogon.csv") data.drop(['Categoría'], axis=1, inplace=True) data.drop(data.columns[0], axis=1, inplace=True) print(data) pca = PCA(n_components=3) pca.fit(data) print('se alimentó') x_pca = pca.transform(data) miLista = ['PCA1', 'PCA2', 'PCA3', 'PCA4', 'PCA5', 'PCA6', 'PCA7', 'PCA8'] tablaPCA = pd.DataFrame(data=x_pca, columns=miLista) print(tablaPCA) #Ahora vamos a agrupar los comentarios en base a estos 3 PCA km = KMeans(n_clusters=2, n_init=100) lista_de_cluster = km.fit_predict(tablaPCA) print(lista_de_cluster) tablaPCA["Cluster"]=lista_de_cluster print(tablaPCA) tablaPCA.to_csv("PCA_smogon.csv")
问题描述
运行上述代码时,执行pca.fit(data)步骤反复出现**"could not convert string to float"**错误。原本期望通过PCA的fit和transform方法得到降维后的矩阵,尝试过使用标签函数、fit_transform方法均无法解决,特此求助。
问题原因
PCA是纯数值型算法,要求输入的特征矩阵必须全部由数值类型(int/float)组成。报错说明你的data数据框中仍存在未清理的字符串类型列。
解决方法
- 定位字符串列
先检查数据类型,找出所有字符串列:
# 查看所有列的数据类型 print(data.dtypes) # 直接筛选出字符串类型的列名 print(data.select_dtypes(include=['object']).columns)
- 清理/转换字符串列
- 若字符串列是无关冗余数据,直接删除:
# 保留所有非字符串类型的列 data = data.select_dtypes(exclude=['object'])
- 若字符串列是需要保留的分类变量,进行编码转换:
- 标签编码(适用于有序分类,比如"低/中/高"):
from sklearn.preprocessing import LabelEncoder le = LabelEncoder() for col in data.select_dtypes(include=['object']).columns: data[col] = le.fit_transform(data[col]) - 独热编码(适用于无序分类,比如"苹果/香蕉/橙子"):
data = pd.get_dummies(data, columns=data.select_dtypes(include=['object']).columns)
- 标签编码(适用于有序分类,比如"低/中/高"):
- 验证数据有效性
处理完成后,再次确认所有列都是数值类型:
print(data.dtypes)
- 修正代码中的列名不匹配问题
你设置PCA降维到3个维度,但创建tablaPCA时用了8个列名,这会导致维度不匹配报错,需修改列名列表:
miLista = ['PCA1', 'PCA2', 'PCA3'] tablaPCA = pd.DataFrame(data=x_pca, columns=miLista)
完成上述步骤后,重新运行代码即可正常执行PCA降维。
内容的提问来源于stack exchange,提问作者yoryi
相关产品推荐
相关产品推荐

