导入CSV数据用seaborn的regplot、lmplot无回归线且报UFuncTypeError如何解决
问题解决方法
错误原因
报错UFuncTypeError的核心原因是CSV中的Date 2.0列被pandas默认读取为字符串类型,线性回归运算需要数值型自变量,字符串无法参与乘法运算导致报错。日期显示挤压是因为x轴为字符串类型时,刻度默认没有做旋转和间距优化。
修复代码
import pandas as pd import seaborn as sns import matplotlib.pyplot as plt # 读取数据时直接解析日期列为datetime类型 df = pd.read_csv('Tokyo rent (One Bedroom apartment in the city centre).csv', thousands=',', parse_dates=['Date 2.0']) # 生成数值型时间特征用于回归计算:转换为距离最早日期的天数 df['days_from_start'] = (df['Date 2.0'] - df['Date 2.0'].min()).dt.days # 用数值特征做自变量拟合回归模型 g = sns.lmplot(x='days_from_start', y='Rent(Local Currency)', data=df) ax = g.axes[0][0] # 替换x轴刻度为日期格式,解决显示挤压问题 ax.set_xticks(df['days_from_start']) ax.set_xticklabels(df['Date 2.0'].dt.strftime('%Y-%m-%d')) ax.set_xlabel('Date') # 旋转45度避免日期重叠 g.figure.autofmt_xdate(rotation=45) plt.show()
代码说明
- 读取数据时通过
parse_dates参数直接将Date 2.0转换为datetime格式,无需手动处理类型 - 新增的
days_from_start为纯数值列,满足线性回归的输入要求,不会再触发类型错误 - 绘图后手动将x轴刻度替换为日期格式,配合旋转操作彻底解决日期挤压重叠问题
内容的提问来源于stack exchange,提问作者pfft khaganate
相关产品推荐
相关产品推荐

