如何读取含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
相关产品推荐
相关产品推荐

