如何将Pandas DataFrame的行转为JSON字符串并遍历处理?
解决Pandas DataFrame转JSON后无法遍历单行数据的问题
你的问题出在对to_json(orient='records')返回结果的格式理解上:当你用这个参数时,得到的是一个紧凑的JSON数组字符串(比如[{"A":0.123,"B":-0.456,...}, {...}, ...]),整个字符串里没有换行符,所以用split('\n')拆分自然得不到独立的单行JSON对象,反而会把整个数组当成一个元素,后续json.loads还会报错。
下面给你两种可行的解决方案:
方案1:直接解析整个JSON数组(推荐)
既然返回的是JSON数组,我们可以直接用json.loads把整个字符串转成Python列表,然后遍历列表里的每个字典即可,这是最高效的方式:
import json import pandas as pd import numpy as np # 生成测试DataFrame df = pd.DataFrame(np.random.randn(50, 4), columns=list('ABCD')) # 转为JSON数组字符串 df_as_json = df.to_json(orient='records') # 解析整个数组为Python列表 records_list = json.loads(df_as_json) # 遍历每个数据行对应的字典 for jdict in records_list: # 这里写你的处理逻辑,比如打印当前行的A列值 print(f"当前行A列值:{jdict['A']}")
方案2:生成每行一个JSON的格式(适合需要逐行存储/传输的场景)
如果你确实需要得到每行一个独立JSON对象的字符串,可以在调用to_json时加上lines=True参数,这样输出的字符串会每行对应一个JSON对象,此时用split('\n')拆分就有效了(注意要过滤可能存在的空行):
import json import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(50, 4), columns=list('ABCD')) # 生成每行一个JSON的字符串 df_as_json_lines = df.to_json(orient='records', lines=True) # 拆分并遍历 for json_document in df_as_json_lines.split('\n'): # 跳过最后可能的空行 if json_document.strip(): jdict = json.loads(json_document) # 处理逻辑示例 print(f"当前行B列值:{jdict['B']}")
简单总结下:
- 不需要单行JSON字符串的话,直接解析整个数组是最优选择
- 必须要单行格式时,用
lines=True参数生成对应格式再拆分
内容的提问来源于stack exchange,提问作者Markus
相关产品推荐
相关产品推荐

