Pandas数据集datetime列导致corr()及Seaborn绘图报错如何解决?
首先明确所有问题的核心诱因:datetime类型属于时间对象,不属于可参与数值计算的数值类型,pandas相关性计算、seaborn回归类绘图默认仅处理数值类型输入,你不需要修改原有datetime列的格式,只要新增一列将时间转换为可计算的数值格式即可解决所有问题。
具体操作步骤
- 新增数值型时间特征列,有两种常用转换方式可选:
- 转换为Unix时间戳(秒级整数,通用场景)
# 转成秒级时间戳,也可以去掉//10**9保留纳秒级精度 df['timestamp'] = df['Tarih'].astype('int64') // 10**9
- 转换为距数据集最早时间的间隔值(适合时间间隔均匀的序列场景,你的数据集为15分钟间隔,可按需求调整单位)
min_date = df['Tarih'].min() # 这里计算的是距离最早时间的15分钟间隔数,也可以换成小时/天等单位 df['time_delta'] = (df['Tarih'] - min_date).dt.total_seconds() / (15 * 60)
- 对应场景调整调用代码:
- 计算相关系数:新增数值列后直接调用
df.corr(),返回结果就会包含时间与通话量的相关系数 - pairplot绘图:指定数值型时间列作为特征即可,也可以通过vars参数指定要展示的列减少冗余输出
sns.pairplot(df, vars=['timestamp', 'ToplamCagri'], kind="reg")
- jointplot绘图:将x参数替换为新增的数值型时间列即可解决报错
sns.jointplot(x="timestamp",y="ToplamCagri",data=df, kind="reg")
如果需要x轴展示原始日期格式,后续可以手动设置xticks将数值映射为对应的时间字符串即可。
补充说明:如果不需要做回归拟合,仅绘制时间序列趋势图,直接使用原有datetime列作为x轴即可,比如调用sns.lineplot(x='Tarih', y='ToplamCagri', data=df)不会触发类型报错。
内容的提问来源于stack exchange,提问作者Bloodline06
相关产品推荐
相关产品推荐

