You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用pd.json_normalize解析CSV中properties字段返回空DataFrame的问题

解决pd.json_normalize解析CSV中properties字段返回空DataFrame的问题

问题重现

原始CSV数据

cardinality|create_time|properties 382|2022-04-05 16:32:43.000+0000|{'birthday': '542217600000', 'first_name': 'Char', 'gender': 'Male', 'last_name': 'Mander', 'nick_name': ''} 400|2022-02-07 14:20:59.000+0000|{'birthday': '967046400000', 'first_name': 'ABC', 'gender': 'Male', 'last_name': 'ZXY', 'nick_name': ''} 132|2021-08-09 14:01:30.000+0000|{'birthday': '739900800000', 'first_name': 'Test', 'gender': 'Male', 'last_name': 'Tickles', 'nick_name': ''}

执行代码

with open ('input.csv' ,'r') as data1: 
    df1 = pd.read_csv(data1, encoding='utf-8', dtype= 'object', sep='|') 
df1=df1['properties']
print(pd.json_normalize(df1))

错误结果

Empty DataFrame
Columns: []
Index: [0, 1, 2]

期望输出

birthday first_name gender last_name nick_name
0  542217600000       Char   Male    Mander
1  967046400000        ABC   Male       ZXY
2  739900800000       Test   Male   Tickles

问题原因

pd.json_normalize要求输入是可解析的JSON对象(如字典列表),但当前properties列的内容是单引号包裹的Python字典格式字符串,并非标准JSON(标准JSON使用双引号),直接传入无法被识别,因此返回空DataFrame。

解决方案

步骤1:修复CSV读取格式(可选)

原CSV数据中所有记录挤在同一行,需要先拆分记录再构建DataFrame。如果你的CSV是每条记录单独一行,可跳过此步骤。

步骤2:将字符串转为Python字典

使用ast.literal_eval(安全解析Python字面量)将单引号字典字符串转为真实字典,避免eval的安全风险。

完整代码

import pandas as pd
import ast

# 读取并处理CSV数据
with open('input.csv', 'r') as data1:
    content = data1.read()
    # 拆分表头和记录(原数据用空格分隔不同记录)
    parts = content.split(' ')
    parts = [p for p in parts if p.strip()]  # 过滤空内容
    header = parts[0].split('|')
    # 拆分每条记录的字段
    records = [line.split('|') for line in parts[1:]]
    df1 = pd.DataFrame(records, columns=header)

# 将properties列的字符串转为字典
df1['properties'] = df1['properties'].apply(ast.literal_eval)

# 解析字典得到结构化数据
normalized_df = pd.json_normalize(df1['properties'])

print(normalized_df)

执行结果

运行后将得到期望的结构化DataFrame:

birthday first_name gender last_name nick_name
0  542217600000       Char   Male    Mander
1  967046400000        ABC   Male       ZXY
2  739900800000       Test   Male   Tickles

内容的提问来源于stack exchange,提问作者chichi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 23:42:51