如何将Pandas DataFrame导出为指定结构的JSON格式?
解决Pandas导出JSON时字符串列表转真实列表的问题
问题描述
现有如下Pandas DataFrame:
import pandas as pd data = { "ID": [123123, 222222, 333333], "Main Authors": ["[Jim Allen, Tim H]", "[Rob Garder, Harry S, Tim H]", "[Wo Shu, Tee Ru, Fuu Wan, Gee Han]"], "Abstract": ["This is paper about hehe", "This paper is very nice", "Hello there paper from kellogs"], "paper IDs": ["[123768, 123123]", "[123432, 34345, 353545, 454545]", "[123123, 3433434, 55656655, 988899]"], } df = pd.DataFrame(data)
使用df.to_json(orient='records')导出后,Main Authors和paper IDs仍为字符串格式的列表,不符合需求。需要将这两列转为真实的列表,同时把ID转为字符串类型,最终导出的JSON结构如下:
{"ID": "123123", "Main Authors": ["Jim Allen", "Tim H"], "Abstract": "This is paper about hehe", "paper IDs": ["123768", "123123"]} {"ID": "222222", "Main Authors": ["Rob Garder", "Harry S", "Tim H"], "Abstract": "This paper is very nice", "paper IDs": ["123432", "34345", "353545", "454545"]} {"ID": "333333", "Main Authors": ["Wo Shu", "Tee Ru", "Fuu Wan", "Gee Han"], "Abstract": "Hello there paper from kellogs", "paper IDs": ["123123", "3433434", "55656655", "988899"]}
解决步骤
1. 解析字符串列表为真实列表
定义通用解析函数,处理字符串形式的列表:
def parse_str_list(s, convert_to_str=False): # 去除首尾方括号,分割元素并清理空格 items = [item.strip() for item in s.strip('[]').split(',')] # 按需将元素转为字符串(比如paper IDs的数字) if convert_to_str: items = [str(item) for item in items] return items
2. 处理目标列
将函数应用到需要转换的列:
# 处理作者列,保留原字符串格式 df['Main Authors'] = df['Main Authors'].apply(parse_str_list) # 处理paper IDs列,将数字转为字符串 df['paper IDs'] = df['paper IDs'].apply(lambda x: parse_str_list(x, convert_to_str=True))
3. 转换ID列为字符串
df['ID'] = df['ID'].astype(str)
4. 导出符合要求的JSON
如果需要每行一个独立JSON对象(匹配需求示例),使用lines=True参数:
result_json = df.to_json(orient='records', lines=True, force_ascii=False) print(result_json)
如果需要标准JSON数组格式,去掉lines=True即可:
result_json_array = df.to_json(orient='records', force_ascii=False)
最终效果
执行上述代码后,导出的JSON会将Main Authors和paper IDs转为真实的列表类型,ID转为字符串,完全符合需求格式。
内容的提问来源于stack exchange,提问作者keeran_q789
相关产品推荐
相关产品推荐

