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

Pandas数据透视报错KeyError: '00:29:59',如何修复?

问题解决:Pivot KeyError 及 Cumcount 常见问题

一、KeyError: '00:29:59' 解决方法

错误原因

你的代码中columns=df['Datetime'][0:48]存在两个核心问题:

  1. 直接取前48个Datetime值作为列名,但后续分组的Datetime(对应其他日期的半小时点)和前48个值完全不匹配(比如前48个是1号的时间,后续是2号、3号的),pivot时找不到对应列名就会报错。
  2. 若Datetime是字符串格式,可能存在精度差异(比如部分时间是00:29:59,部分是00:30:00),导致时间标签不统一,触发KeyError。

修复步骤

  1. 统一时间标签:先把Datetime转为datetime类型,提取纯时间部分(去掉日期)作为统一的分组标签:
    import pandas as pd
    
    # 转换Datetime为datetime类型,提取时间部分
    df['time_slot'] = pd.to_datetime(df['Datetime']).dt.time
    
  2. 重新执行pivot:用统一的time_slot作为列参数,分组逻辑保留index//48(每48行对应一天的48个半小时点):
    result = df.assign(group=df.index//48).pivot(index='group', values='Y', columns='time_slot')
    
    这样生成的结果会有48列,对应一天的所有半小时时间点,每行对应连续48个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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 22:41:05