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

Pandas从JSON列表字段创建city新列报TypeError如何解决?

错误原因

你调用df['details'].str.strip('[]')后,details列的内容会被处理为字符串格式的字典(例如"{'country': 'USA', 'city': 'NYC'}"),并非真正的Python字典对象,自然无法通过字典key的方式取值,才会触发TypeError: string indices must be integers报错。

理想实现方案

分两种场景处理:

  1. 如果你原始数据的details列本身就是列表嵌套字典的Python对象类型,不需要做strip处理,直接取列表第一个元素的city字段即可:
df['city'] = df['details'].map(lambda x: x[0]['city'])
# 更简洁的pandas内置写法:
# df['city'] = df['details'].str[0].str.get('city')
  1. 如果你是从csv/文本文件读取的数据,details列默认被解析为字符串格式的列表,需要先把字符串转为真实的Python对象再取值:
import ast
# 先将字符串格式的列表转成真实的列表嵌套字典结构
df['details'] = df['details'].apply(ast.literal_eval)
# 再提取city字段
df['city'] = df['details'].str[0].str.get('city')

补充建议

不要用strip处理结构化的字符串内容,一旦字段值本身包含[或]字符,会导致内容被误改,用ast.literal_eval解析结构化字符串是更稳妥的方案,安全性也远高于直接用eval。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 15:36:03