如何将含JSON格式列的CSV文件导入为DataFrame并保留JSON字符串列?
解决CSV中包含JSON列的DataFrame导入问题
遇到CSV里混有JSON格式列的情况确实头疼,不过有几个简单的方法可以直接把JSON列完整保留为字符串导入DataFrame,我给你分情况说明:
情况1:JSON列被双引号包裹(符合CSV规范)
这是最常见的场景,CSV里包含分隔符(逗号)的字段通常会被双引号包裹,只需要给read_csv配置正确参数就能识别:
先导入依赖库:
import pandas as pd import csv
然后读取文件:
df = pd.read_csv( "your_file.csv", quotechar='"', # 指定包裹含分隔符字段的字符 quoting=csv.QUOTE_ALL, # 让pandas识别所有被引号包裹的字段 engine="python" # 用Python引擎处理,比C引擎更灵活适配特殊格式 )
如果你的JSON列里存在转义的双引号(比如"{\"key\": \"value\"}"),再加上escapechar='\\'参数即可:
df = pd.read_csv( "your_file.csv", quotechar='"', escapechar='\\', engine="python" )
这样处理后,形如"[{...}, {...}]"的JSON内容会被完整保留为DataFrame的一个字符串列。
情况2:JSON列没有被引号包裹(非规范CSV)
如果你的CSV没给JSON列加引号,read_csv会把JSON里的逗号当成分隔符,导致列错位。这种情况可以用正则表达式分割每一行,只把不在方括号内的逗号作为分隔符:
import pandas as pd import re def split_csv_row(row): # 正则逻辑:只分割不在[]范围内的逗号 return re.split(r',(?![^\[]*\])', row.strip()) # 手动读取并处理每一行 with open("your_file.csv", "r", encoding="utf-8") as f: header = split_csv_row(f.readline()) data_rows = [split_csv_row(line) for line in f] # 转为DataFrame df = pd.DataFrame(data_rows, columns=header)
这个正则的负向预查规则,会确保只分割那些不在JSON数组内部的逗号,完美避开JSON结构里的逗号。
验证结果
导入后你可以用下面的代码确认JSON列是否完整:
# 查看列类型 print(df.dtypes) # 打印第一行的JSON列内容 print(df['your_json_column'].iloc[0])
内容的提问来源于stack exchange,提问作者DutchJ
相关产品推荐
相关产品推荐

