执行关联矩阵计算代码时为何抛出ValueError: could not convert string to float: 'DZA'?
错误原因分析:ValueError: could not convert string to float: 'DZA'
这个错误的核心原因很直接:pandas.DataFrame.corr()方法只能对纯数值型数据计算相关系数,而你用来计算的data_corr数据框里,还存在未处理的字符串类型列(报错里的'DZA'大概率是国家代码这类字符串标识),这些字符串无法被自动转换成浮点数,导致计算相关矩阵时失败。
看你提供的代码:
from sklearn.preprocessing import LabelEncoder # Create a copy of the data data_corr = new_data.copy() # Encode the 'banking_crisis' column data_corr['banking_crisis'] = LabelEncoder().fit_transform(data_corr['banking_crisis']) # Convert 'currency_crisis' to binary: 'no_crisis' (0) and 'crisis' (1) data_corr['currency_crisis'] = data_corr['currency_crisis'].apply(lambda x: 0 if x == 0 else 1) # Compute the correlation matrix corr_matrix = data_corr.corr()
你只对banking_crisis和currency_crisis两列做了数值转换,但new_data里的其他列(比如包含'DZA'的列)还是字符串类型,这些列被保留到了data_corr中,调用corr()时就会触发类型转换错误。
简单的排查与解决方向
- 先查看数据的列类型,确认哪些是字符串列:
print(data_corr.dtypes) - 处理方式二选一:
- 如果这些字符串列是无关的标识类数据(比如国家代码、样本ID),直接剔除后再计算:
# 只保留数值型列 data_corr = data_corr.select_dtypes(include=['int64', 'float64']) corr_matrix = data_corr.corr() - 如果字符串列是需要参与分析的分类变量,用编码工具(比如LabelEncoder、OneHotEncoder)转换成数值后再计算相关矩阵。
- 如果这些字符串列是无关的标识类数据(比如国家代码、样本ID),直接剔除后再计算:
内容的提问来源于stack exchange,提问作者Leonardo
相关产品推荐
相关产品推荐

