使用read_csv读取CSV时单列多格式内容解析失败的求助
解析含特殊格式值的CSV文件
针对CSV中带引号的"(10,12)"这类值无法正确解析的问题,给你几个实用解决思路:
方法一:调整pandas读取参数并使用Python引擎
pandas的C引擎对复杂引号场景支持有限,改用Python引擎配合quoting=pd.QUOTE_NONE,可强制不将引号作为单元格分隔标识,避免内容被拆分:
import pandas as pd df = pd.read_csv( 'your_file.csv', sep=',', engine='python', quotechar='"', quoting=pd.QUOTE_NONE )
如果引号只是单元格内容的一部分,这个方法能直接保留原始内容,不会误拆分列。
方法二:预处理文件清除多余引号
如果引号是多余的(比如单元格内容本应是(10,12)却被加了引号),可以用正则匹配并替换单元格首尾的引号,避免干扰解析:
import pandas as pd import re # 读取原始文件内容 with open('your_file.csv', 'r', encoding='utf-8') as f: content = f.read() # 精准替换单元格首尾的引号(不影响内容内部符号) processed_content = re.sub(r'(?<=,)"(?=\()|(?<=\))"(?=,|\n)', '', content) # 写入临时文件后读取 with open('temp_processed.csv', 'w', encoding='utf-8') as f: f.write(processed_content) df = pd.read_csv('temp_processed.csv')
这个正则只会匹配紧跟在逗号后、开头是(的引号,以及紧跟在)后、结尾是逗号或换行的引号,不会误改其他内容。
方法三:用csv模块逐行预处理后转DataFrame
直接使用Python标准库的csv模块读取每行,手动处理每个单元格的引号,再转成DataFrame,灵活性更高:
import pandas as pd import csv rows = [] with open('your_file.csv', 'r', encoding='utf-8') as f: # 初始化csv读取器,指定分隔符和引号字符 reader = csv.reader(f, delimiter=',', quotechar='"') for row in reader: # 去除每个单元格首尾的引号(仅当单元格被引号包裹时) processed_row = [ cell.strip('"') if cell.startswith('"') and cell.endswith('"') else cell for cell in row ] rows.append(processed_row) # 转换为DataFrame,第一行作为表头 df = pd.DataFrame(rows[1:], columns=rows[0])
这种方式可以逐行控制处理逻辑,适合格式特别混乱的CSV文件。
内容的提问来源于stack exchange,提问作者Nikolay Genchev
相关产品推荐
相关产品推荐

