You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

pandas绘制散点图以datetime.time为X轴报float()类型错误如何解决

报错原因

pandas的scatter散点图要求x、y轴均为可转换为数值的类型。你提取的longtime_time是datetime.time类型的对象,存储为object dtype,无法被自动转换为数值用于坐标系定位,因此触发类型错误。

解决方案

以下提供两种可直接落地的处理方式:

方案1:转换为timedelta类型后用pandas plot绘制

将时间列转换为距离当日0点的时间差(timedelta类型),pandas可直接识别该类型作为坐标轴:

import datetime
import matplotlib.dates as mdates

# 转换time对象为timedelta
date_merge['longtime_timedelta'] = date_merge['longtime_time'].apply(lambda t: datetime.timedelta(hours=t.hour, minutes=t.minute, seconds=t.second))

# 绘图
ax = date_merge.plot(x="longtime_timedelta", y="value", kind="scatter", figsize=[15, 5], linewidth=0.1, alpha=0.6, color="#003399")
# 调整x轴刻度显示为时分秒格式
ax.xaxis.set_major_formatter(mdates.DateFormatter('%H:%M:%S'))
plt.xticks(rotation=45)
plt.show()

如果保留了原始的longtime datetime类型字段,可使用更高效的转换方式,无需逐行apply:

date_merge['longtime_timedelta'] = filtered_df_date['longtime'] - filtered_df_date['longtime'].dt.normalize()

方案2:使用matplotlib原生scatter绘制

matplotlib原生散点图对时间类型的兼容性更好,可直接传入datetime.time类型作为x轴参数:

import matplotlib.pyplot as plt
import matplotlib.dates as mdates

plt.figure(figsize=(15,5))
plt.scatter(date_merge['longtime_time'], date_merge['value'], linewidth=0.1, alpha=0.6, color="#003399")
# 调整x轴显示格式
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%H:%M:%S'))
plt.xticks(rotation=45)
plt.xlabel('longtime_time')
plt.ylabel('value')
plt.show()

内容的提问来源于stack exchange,提问作者mika

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 20:30:01