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

处理DataFrame时遇TypeError:列表索引需为整数/切片而非字符串

解决TypeError: list indices must be integers or slices, not str问题

错误原因

你写的desejados = ids[ids["ID"] == numero]["Protocolo"]是Pandas DataFrame的索引语法,但此时ids已经是列表类型(因为在n_protocolo_callback里被赋值成了laudos列表),列表只能用整数或切片做索引,用字符串["ID"]自然会触发类型错误。

解决步骤

  • 修正n_protocolo_callback的赋值逻辑:
    不要直接把ids赋值为列表laudos,如果laudos是需要整合的数据源,先把它转换成DataFrame再和原ids合并,比如:

    # 假设laudos是字典组成的列表,转换为DataFrame
    laudos_df = pd.DataFrame(laudos)
    # 按需求合并(示例用concat,也可以用merge根据ID关联)
    ids = pd.concat([原ids_dataframe, laudos_df], ignore_index=True)
    

    确保最终传入graficos的ids是Pandas DataFrame类型。

  • 添加类型检查(排查用):
    在graficos函数开头加一行打印,快速确认ids的类型,验证问题:

    def graficos(ids, numero):
        print(f"当前ids类型: {type(ids)}")  # 如果输出是<class 'list'>,就坐实了类型问题
        desejados = ids[ids["ID"] == numero]["Protocolo"]
        # 后续代码
    
  • 修复graficos里的索引(如果必须处理列表):
    万一没办法把ids转回DataFrame,那得改成列表的遍历方式,比如:

    # 遍历列表找匹配ID的Protocolo
    desejados = [item["Protocolo"] for item in ids if item["ID"] == numero]
    

    但这种情况只适用于laudos是字典列表的场景,优先推荐把ids转回DataFrame,保持原逻辑的简洁性。

总结

核心问题就是数据类型不匹配:原本设计用DataFrame的索引语法,实际传入的是列表。只要修正n_protocolo_callback里的赋值逻辑,让ids保持DataFrame类型,就能解决这个报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 23:20:37