如何用Python Pandas正确读取以/t为分隔符的非标准CSV文件?
解决Pandas读取"/t"分隔CSV时引号处理异常的问题
正确读取方法
直接在read_csv中明确指定分隔符(用正则匹配"/t")和引号处理规则,就能让Pandas自动移除所有字段的引号:
import pandas as pd import csv # 关键参数:sep用正则匹配"/t"字符串,quoting指定所有带引号的字段都要解析 df = pd.read_csv( "your_file.csv", sep=r'/t', quotechar='"', quoting=csv.QUOTE_ALL )
读取完成后,列名和数据行的双引号都会被自动移除,后续筛选列名Field label 3的问题即可解决。
原调用失败原因
你之前指定delimiter_char="/t"时,可能未用正则匹配分隔符,或未明确设置quoting参数。Pandas默认的引号解析逻辑仅识别了第一列的引号,后续字段因/t紧跟在引号后,被误判为字段内容的一部分,导致引号未被移除。
替代解决办法
如果上述方法因特殊场景无法生效,可尝试以下两种方案:
方案1:读取后手动清理引号
先按原方式读取文件,再批量移除列名和数据中的引号:
# 按原设置读取文件 df = pd.read_csv("your_file.csv", sep="/t") # 清理列名的引号 df.columns = df.columns.str.replace('"', '') # 清理所有字符串类型列的引号 df = df.apply(lambda col: col.str.replace('"', '') if col.dtype == 'object' else col)
方案2:预处理文件内容
先读取文件内容,替换掉引号和分隔符,再用Pandas读取:
import pandas as pd with open("your_file.csv", "r") as f: # 移除所有双引号,再把"/t"替换为逗号(或其他标准分隔符) processed_content = f.read().replace('"', '').replace('/t', ',') # 从处理后的字符串中读取数据 df = pd.read_csv(pd.StringIO(processed_content))
内容的提问来源于stack exchange,提问作者Raits
相关产品推荐
相关产品推荐

