使用datetime按日期小时分组Time(+01:00)列遇ValueError问题
问题解决:ValueError: time data 'Time(+01:00)' does not match format '%H:%M:%S'
错误原因
报错核心是数据中存在值为Time(+01:00)的行,该字符串不匹配%H:%M:%S的时间格式,导致pd.to_datetime解析失败。通常是读取数据时重复导入了表头,使得某一行的时间列值被替换成了列名本身。
解决方案
1. 清理脏数据
先过滤掉时间列不符合HH:MM:SS格式的无效行:
# 筛选出时间列符合标准格式的行 df = df[df['Time(+01:00)'].str.match(r'^\d{2}:\d{2}:\d{2}$')]
2. 提取小时并分组计算均值
数据清理完成后,提取小时字段并按日期+小时维度分组:
# 从时间字符串中提取小时 df['Hour'] = pd.to_datetime(df['Time(+01:00)'], format='%H:%M:%S').dt.hour # 按日期和小时分组求均值 df_grouped = df.groupby(['Date', 'Hour']).mean().reset_index() # 查看结果 df_grouped.head()
可选优化:合并日期时间为完整datetime对象
如果后续需要更灵活的时间操作,建议合并日期和时间列生成完整的datetime:
# 合并日期与时间列,指定日期格式为YYYY.MM.DD df['Full_Datetime'] = pd.to_datetime(df['Date'] + ' ' + df['Time(+01:00)'], format='%Y.%m.%d %H:%M:%S') # 提取小时 df['Hour'] = df['Full_Datetime'].dt.hour # 按日期和小时分组 df_grouped = df.groupby([df['Full_Datetime'].dt.date, 'Hour']).mean().reset_index()
注意事项
groupby().mean()会自动生成唯一的分组结果,无需额外调用drop_duplicates()。- 你的时间是24小时制,
%H格式符完全适配该场景,无需修改格式参数。
内容的提问来源于stack exchange,提问作者Sasi Sandeep Singh Bhemal
相关产品推荐
相关产品推荐

