Jupyter Notebook中df.corr()因字符串列无法计算数值相关性报错求助
解决df.corr()因字符串列报错的问题
问题原因
df.corr()默认计算Pearson相关系数,仅支持数值型数据,但部分pandas版本不会自动过滤非数值列,当DataFrame中存在字符串、分类等非数值类型列时,就会抛出ValueError: could not convert string to float错误。
解决方案
方法1:手动筛选数值型列
使用select_dtypes()方法先提取所有数值类型的列,再计算相关性:
import seaborn as sns import pandas as pd df = sns.load_dataset("tips") # 筛选数值列 numeric_cols = df.select_dtypes(include=['number']) # 计算相关矩阵 corr_matrix = numeric_cols.corr() print(corr_matrix)
方法2:使用numeric_only参数(pandas 1.0.0+支持)
直接在corr()方法中指定numeric_only=True,让函数自动忽略非数值列:
import seaborn as sns import pandas as pd df = sns.load_dataset("tips") corr_matrix = df.corr(numeric_only=True) print(corr_matrix)
额外说明
如果需要分析分类变量与数值变量的相关性,可以先对分类变量做编码处理(比如独热编码),再计算全量相关性:
encoded_df = pd.get_dummies(df) corr_matrix = encoded_df.corr() print(corr_matrix)
内容的提问来源于stack exchange,提问作者Salin Sharma
相关产品推荐
相关产品推荐

