使用Python Pandas转换嵌套JSON为CSV时内容合并为一列如何解决
问题原因
你的JSON文件为二级嵌套结构,所有业务字段都封装在一级键Credit-NoSQL下,直接调用pd.read_json()只会将Credit-NoSQL识别为单列,不会自动展开其内部的字典值为多列,因此出现所有内容挤在同一列的问题。
解决方案
方法1:先提取嵌套层再转换(逻辑直观,适合新手)
先通过json模块读取原始文件,提取每个条目下Credit-NoSQL对应的实际业务数据后,再转换为DataFrame导出:
import pandas as pd import json # 加载原始JSON文件 with open("CDMP_E2.json", "r", encoding="utf-8") as f: raw_data = json.load(f) # 提取所有嵌套的业务数据 processed_data = [item["Credit-NoSQL"] for item in raw_data] # 转换为DataFrame并导出CSV df = pd.DataFrame(processed_data) # index=False表示不导出多余的行号列,utf-8-sig编码避免乱码 df.to_csv("CDMP_Output.csv", index=False, encoding="utf-8-sig")
方法2:使用pandas内置工具直接展开嵌套结构
用pd.json_normalize可以直接处理嵌套JSON结构,代码更简洁:
import pandas as pd # 读取原始JSON df = pd.read_json("CDMP_E2.json") # 展开Credit-NoSQL下的所有字段为单独列 df = pd.json_normalize(df["Credit-NoSQL"]) # 导出CSV df.to_csv("CDMP_Output.csv", index=False, encoding="utf-8-sig")
两种方法导出的CSV都会自动将account、date、type、amount、returneddate作为列头,无returneddate的记录对应位置会自动留空,完全符合预期输出效果。
内容的提问来源于stack exchange,提问作者Sotark
相关产品推荐
相关产品推荐

