Python中如何将嵌套列表字符串用pandas或简单方法转为真实列表
字符串格式嵌套列表转Python真实列表(无正则新手友好方案)
核心思路
你的bound_box列的字符串格式高度规整,仅靠普通字符串替换就能转成合法Python表达式,再用Python标准库ast.literal_eval安全转换为真实列表结构,全程不需要正则表达式,代码简单易理解。其中ast.literal_eval是Python官方推荐的安全转换方法,只会解析合法的Python基础数据结构,不会执行恶意代码,比直接用eval安全很多。
实现步骤
1. 导入依赖库
都是Python和pandas自带的库,无需额外安装:
import pandas as pd import ast
2. 编写转换函数
def str_to_list(box_str): # 去除字符串外层的单引号 box_str = box_str.strip("'") # 三步字符串替换,转成合法Python字典格式 box_str = box_str.replace('=', "':") box_str = box_str.replace('{', "{'") box_str = box_str.replace(', ', ", '") # 安全转换为真实的列表嵌套字典结构 return ast.literal_eval(box_str)
3. 应用到pandas列
# 把bound_box列从字符串转成真实列表 df['bound_box'] = df['bound_box'].apply(str_to_list)
4. 展开列表项(最终需求)
用pandas自带的explode方法即可把列表的每个元素拆成单独行:
# 展开bound_box列表,得到每行一个字典的结构 df_exploded = df.explode('bound_box', ignore_index=True) # 可选:如果需要把字典里的width、x等字段拆成单独列,再加一步 df_final = pd.json_normalize(df_exploded['bound_box']).join(df_exploded.drop('bound_box', axis=1))
效果验证
转换前的bound_box列值为字符串:'[{width=0.05, x=0.46879336, growth_state=EARLY}]'
转换后为真实Python列表:[{ 'width': 0.05, 'x': 0.46879336, 'growth_state': 'EARLY' }]
空字符串'[]'转换后会得到空列表[],展开后会自动忽略空行。
内容的提问来源于stack exchange,提问作者Amit Tiwari
相关产品推荐
相关产品推荐

