如何用Pandas将两个字符串列表转换为JSON数组?Python新手求助
可行,实现方法如下
步骤说明
- 解析字符串形式的列表:DataFrame中存储的是字符串格式的列表,需先转换为Python实际的列表对象,推荐用
ast.literal_eval(比eval更安全,避免代码注入风险)。 - 配对key与val元素:遍历每一行数据,将对应行的keys列表和vals列表元素一一配对,生成
{'key': k, 'val': v}格式的字典。 - 转换为JSON数组:将生成的字典列表转为JSON格式字符串。
代码示例
import pandas as pd import ast import json # 模拟你的DataFrame结构(替换成你实际的DataFrame) df = pd.DataFrame({ 'keys': ["['os', 'language']", "['tool', 'version']"], 'vals': ["['linux', 'python']", "['pandas', '1.5.3']"] }) # 1. 解析字符串列表为实际列表 df['keys'] = df['keys'].apply(ast.literal_eval) df['vals'] = df['vals'].apply(ast.literal_eval) # 2. 生成目标字典列表 result = [] for _, row in df.iterrows(): # 配对当前行的key和val元素 for k, v in zip(row['keys'], row['vals']): result.append({'key': k, 'val': v}) # 3. 转为JSON数组 json_output = json.dumps(result, indent=2) print(json_output)
输出结果
[ { "key": "os", "val": "linux" }, { "key": "language", "val": "python" }, { "key": "tool", "val": "pandas" }, { "key": "version", "val": "1.5.3" } ]
补充说明
- 如果某行的
keys和vals列表长度不一致,zip会以较短的列表长度为准截断配对。若需要保留所有元素,可以用itertools.zip_longest,并处理可能出现的None值:from itertools import zip_longest result = [] for _, row in df.iterrows(): for k, v in zip_longest(row['keys'], row['vals'], fillvalue=None): result.append({'key': k, 'val': v})
内容的提问来源于stack exchange,提问作者CLT00
相关产品推荐
相关产品推荐

