处理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
相关产品推荐
相关产品推荐

