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

如何读取含JSON数组的CSV文件并生成Pandas DataFrame

解决包含JSON字符串的CSV文件读取问题

问题场景

现有orders.csv文件内容如下:

order_id,order_date,user_id,store_id,product_info
1,2022-01-11,948,6,"[{'product_id': 155, 'product_price': 9948.590055202974, 'product_comission': 75, 'comission_is_percent': True, 'count': 1}]"
2,2022-01-11,1074,6,"[{'product_id': 352, 'product_price': 19451.45856712592, 'product_comission': 5, 'comission_is_percent': True, 'count': 1}, {'product_id': 1902, 'product_price': 19593.205091541993, 'product_comission': 7000, 'comission_is_percent': False, 'count': 1}]"
3,2022-01-11,3361,6,"[{'product_id': 2004, 'product_price': 19335.038737925435, 'product_comission': 5, 'comission_is_percent': True, 'count': 1}]"

尝试直接用pandas读取:

import pandas as pd

orders = pd.read_csv('orders.csv')

出现解析错误:

ParserError: Error tokenizing data. C error: Expected 14 fields in line 3, saw 19

问题根源是JSON字符串内部的逗号被误识别为CSV字段分隔符,虽然字段被双引号包裹,但默认解析逻辑未正确处理。


解决方法

方法1:显式指定quotechar参数

通过quotechar告诉pandas将双引号包裹的内容视为单个字段,同时处理JSON字符串的单引号问题(标准JSON要求双引号):

import pandas as pd
import csv
import json

# 读取CSV,指定双引号作为字段包裹符
orders = pd.read_csv('orders.csv', quotechar='"', quoting=csv.QUOTE_MINIMAL)

# 将单引号替换为双引号,解析JSON字符串为Python对象
orders['product_info'] = orders['product_info'].apply(lambda x: json.loads(x.replace("'", '"')))

方法2:使用内置csv模块预处理

如果pandas的解析仍有问题,用Python内置csv模块逐行读取,确保字段识别正确:

import pandas as pd
import csv
import json

data_rows = []
with open('orders.csv', 'r', encoding='utf-8') as f:
    # 用DictReader读取,自动识别表头,处理双引号包裹字段
    reader = csv.DictReader(f, quotechar='"')
    for row in reader:
        # 解析product_info字段
        row['product_info'] = json.loads(row['product_info'].replace("'", '"'))
        data_rows.append(row)

# 转换为DataFrame
orders = pd.DataFrame(data_rows)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 02:06:05