Pandas数据透视报错KeyError: '00:29:59',如何修复?
问题解决:Pivot KeyError 及 Cumcount 常见问题
一、KeyError: '00:29:59' 解决方法
错误原因
你的代码中columns=df['Datetime'][0:48]存在两个核心问题:
- 直接取前48个
Datetime值作为列名,但后续分组的Datetime(对应其他日期的半小时点)和前48个值完全不匹配(比如前48个是1号的时间,后续是2号、3号的),pivot时找不到对应列名就会报错。 - 若
Datetime是字符串格式,可能存在精度差异(比如部分时间是00:29:59,部分是00:30:00),导致时间标签不统一,触发KeyError。
修复步骤
- 统一时间标签:先把
Datetime转为datetime类型,提取纯时间部分(去掉日期)作为统一的分组标签:import pandas as pd # 转换Datetime为datetime类型,提取时间部分 df['time_slot'] = pd.to_datetime(df['Datetime']).dt.time - 重新执行pivot:用统一的
time_slot作为列参数,分组逻辑保留index//48(每48行对应一天的48个半小时点):
这样生成的结果会有48列,对应一天的所有半小时时间点,每行对应连续48个result = df.assign(group=df.index//48).pivot(index='group', values='Y', columns='time_slot')Y值,完全符合你的需求。
二、Cumcount() 常见问题及解决
针对cumcount的典型问题给出解决方案:
- 需求:分组内生成从0开始的连续计数
确保分组键正确,直接调用cumcount:# 基于之前的group列分组,生成组内计数 df['group_count'] = df.groupby('group').cumcount() - 需求:计数从1开始
在cumcount结果上加1:df['group_count'] = df.groupby('group').cumcount() + 1 - 问题:计数不连续/重复
检查分组键是否存在缺失值或类型不一致(比如group列混合了整数和字符串),可以先清理分组键:# 确保group列是整数类型,无缺失 df['group'] = df['group'].astype(int).fillna(-1)
内容的提问来源于stack exchange,提问作者Murilo
相关产品推荐
相关产品推荐

