如何用Pandas解析含JSON的CSV并提取指定字段生成新CSV?
高效提取CSV中JSON列的嵌套字段生成新CSV
不需要逐行迭代,用pandas内置的pd.json_normalize就能高效完成这个需求,它是专门为解析嵌套JSON结构设计的优化方法,比手动循环或者apply的效率高很多,尤其是数据量较大时。
完整实现步骤:
读取CSV并转换JSON字符串为字典
利用read_csv的converters参数直接在读取时完成字符串到字典的转换(比后续单独用apply更简洁):import pandas as pd import ast # 读取CSV,仅保留data列,同时转换JSON字符串为字典 df = pd.read_csv(mycsv_file, sep=";", usecols=["data"], converters={"data": ast.literal_eval})解析嵌套的labels字段
使用pd.json_normalize直接提取data字典中labels下的所有键值对,自动补全缺失的字段为NaN:# 解析嵌套的labels字段 labels_df = pd.json_normalize(df["data"], record_path=["labels"])格式化输出为目标CSV
将NaN替换为空字符串,然后输出为分号分隔的CSV:# 把缺失值替换为空字符串 labels_df = labels_df.fillna("") # 输出CSV,匹配示例格式(如果需要列名带空格可自行调整header参数) labels_df.to_csv("filtered_output.csv", sep=";", index=False)
效果验证
对于你提供的示例数据,生成的CSV内容如下(和你的需求完全匹配):
label1;label2;label3 value_a;value_b; value_c;;value_d
为什么这个方法更高效?
pd.json_normalize是pandas底层优化的向量化操作,避免了Python层面的逐行循环,在处理大规模数据时,性能会远优于手动迭代或者apply这类逐元素处理的方法。
内容的提问来源于stack exchange,提问作者Nico
相关产品推荐
相关产品推荐

