如何解析包含嵌套JSON的CSV文件并生成结构完整的Pandas DataFrame
解决方案
场景1:CSV每行仅包含单个嵌套JSON,无其他字段
这是最常见的数据库导出单字段JSON的场景,默认read_csv会误把JSON内部的逗号当做分隔符拆分列,需要强制禁用自动分栏逻辑:
import pandas as pd import json # 读取时指定不可能出现的分隔符\0,强制每行作为单个字符串读取 # 若CSV首行是表头,删除header=None和names参数即可 df = pd.read_csv('filepath.csv', sep='\0', header=None, names=['raw_json']) # 得到Pandas Series,每个元素为完整嵌套字典,JSON结构完全保留 json_series = df['raw_json'].apply(json.loads) # 若需要转为DataFrame,仅展开JSON最高层级的键作为列,嵌套结构保持不变 df_final = pd.json_normalize(json_series, max_level=0)
场景2:CSV包含多列,其中某一列为嵌套JSON字符串
数据库导出多字段CSV时,包含特殊字符的JSON字段通常会被双引号包裹,需要指定正确的引号和转义参数读取:
import pandas as pd import json # 读取时指定字段包裹符和转义符,避免JSON内部的逗号、引号触发错误拆分 # delimiter根据实际导出的分隔符调整,常见为逗号、制表符\t df = pd.read_csv( 'filepath.csv', quotechar='"', escapechar='\\', delimiter=',' ) # 假设JSON存储在名为json_data的列中,根据实际列名修改,解析后嵌套结构完整保留 df['json_data'] = df['json_data'].apply(json.loads) # 若需要展开所有字段的最高层级(含普通字段+JSON最高层级键),嵌套结构保持不变 df_final = pd.json_normalize(df.to_dict('records'), max_level=0)
常见问题处理
- 若JSON解析报错,可先打印
df['raw_json'].head()查看原始字符串的转义异常,针对性做字符串替换后再调用json.loads - 大文件处理可在
read_csv中添加chunksize=10000参数分批读取解析,避免内存溢出 - 若需要完整保留原始JSON字符串不解析,跳过
apply(json.loads)步骤即可
内容的提问来源于stack exchange,提问作者margolisd
相关产品推荐
相关产品推荐

