如何将Pandas DataFrame中字符串格式数组转为标准数组格式
解决方法
你可以使用Python标准库ast的literal_eval方法完成转换,该方法可以安全地将字符串形式的Python字面量(包括列表、字典等)转换为对应的原生数据类型,不会执行任意恶意代码,是处理这类场景的首选方案。
修改后完整代码
import json import pandas as pd import ast sample = {"event_id": "dd9726c4-9c22-47b3-9a1b-fd6ecf494076", "event_type": "UPDATED", "attributes_changed": "['metadataStatus', 'elements']"} df = pd.DataFrame(data=sample, index=[0]) # 核心转换逻辑:将字符串格式的列表转为真实列表 df['attributes_changed'] = df['attributes_changed'].apply(ast.literal_eval) df_with_seq_id = [(json.dumps(rec), idx) for (idx, rec) in df.to_dict(orient='index').items()]
替代方案(JSON转换)
如果你的列表字符串格式符合JSON规范,也可以用json.loads转换,需要先把单引号替换为JSON要求的双引号:
df['attributes_changed'] = df['attributes_changed'].apply(lambda x: json.loads(x.replace("'", '"')))
可选容错处理
如果存在部分行格式异常、空值的情况,可以加异常捕获避免转换报错:
def safe_parse_list(x): try: return ast.literal_eval(x) except (ValueError, SyntaxError, TypeError): # 格式错误时返回空列表,也可根据业务需求返回原值/None等 return [] df['attributes_changed'] = df['attributes_changed'].apply(safe_parse_list)
运行以上代码后,attributes_changed字段会被转换为真实的列表类型,序列化为JSON时就不会出现外层多余的双引号,符合你预期的输出格式。
内容的提问来源于stack exchange,提问作者sivaguru
相关产品推荐
相关产品推荐

