如何将CSV中AuditData列的JSON数据转换为带统一表头的DataFrame?
提取CSV中JSON格式日志并生成统一表头DataFrame的解决方案
核心思路
通过解析CSV中AuditData列的JSON字符串,将其展开为结构化的表格数据,再与原CSV的其他列合并,最终得到表头统一的DataFrame。
完整实现步骤
1. 导入依赖库
import pandas as pd import json
2. 读取原始CSV文件
先把整个CSV加载到DataFrame中:
df = pd.read_csv('你的日志文件.csv')
3. 解析AuditData列的JSON数据
编写解析函数处理JSON字符串,再用pd.json_normalize将字典列表展开为标准表格:
# 处理JSON解析异常,避免单个错误行中断整个流程 def parse_audit_json(json_str): try: return json.loads(json_str) except json.JSONDecodeError: return {} # 解析失败返回空字典,后续自动填充NaN # 对AuditData列批量解析 audit_dicts = df['AuditData'].apply(parse_audit_json) # 展开字典为统一表头的DataFrame audit_df = pd.json_normalize(audit_dicts)
4. 合并原数据与解析后的JSON数据
如果需要保留原CSV的其他字段(比如时间戳、用户ID),直接拼接两个DataFrame即可:
final_df = pd.concat([df.drop('AuditData', axis=1), audit_df], axis=1)
5. 处理JSON字段不一致的情况
如果不同行的JSON包含不同字段,pd.json_normalize会自动为所有出现过的字段创建列,缺失字段的行填充NaN,保证表头完全统一。
完整示例代码
import pandas as pd import json # 读取CSV df = pd.read_csv('audit_logs.csv') # 解析AuditData列的JSON def parse_json(s): try: return json.loads(s) except: return {} audit_data = df['AuditData'].apply(parse_json) audit_df = pd.json_normalize(audit_data) # 合并得到最终结果 final_df = pd.concat([df.drop('AuditData', axis=1), audit_df], axis=1) # 查看输出 print(final_df.head())
问题根源说明
你之前的代码之所以会每行重复列名,大概率是逐行解析后每次创建小DataFrame再拼接,没有用批量展开的方式。pd.json_normalize会直接将所有JSON字典统一展开为一个标准表格,从根源避免了重复列名的问题。
内容的提问来源于stack exchange,提问作者universepp
相关产品推荐
相关产品推荐

