TSV文件读取列错位问题:代码修复还是源文件修正?
解决Pandas读取TSV文件时的列错位问题
这个问题完全可以通过代码修复,不需要修改源文件。针对你的场景,提供几种可行方案:
方案一:用正则匹配混合分隔符
如果部分行里的制表符被误替换成了空格,导致sep='\t'无法正确分割,可以用正则表达式匹配一个或多个制表符/空格作为分隔符:
df = pd.read_csv(data, sep='[\t\s]+', header=None, index_col=None, encoding='unicode_escape', engine='python')
注意必须指定engine='python',因为pandas默认的C引擎不支持复杂正则分隔符。
方案二:处理未转义的含空格字段
如果“Jan Verheijen”这类带空格的内容是一个完整字段(本该用引号包裹但源文件没加),导致pandas误分割,可通过指定引号规则让pandas正确识别字段:
import csv df = pd.read_csv(data, sep='\t', header=None, index_col=None, encoding='unicode_escape', quoting=csv.QUOTE_ALL)
如果源文件只有含空格的字段没加引号,也可以尝试quoting=csv.QUOTE_MINIMAL,具体根据实际情况调整。
方案三:手动逐行处理字段
如果上述方案都不适用,且字段格式固定(比如最后两列是无空格的日期和版本,前面是带空格的姓名),可以手动分割每行:
import pandas as pd def parse_line(line): stripped_line = line.strip() # 从后往前拆分,取最后两个无空格的字段作为日期和版本,前面的合并为姓名 split_parts = stripped_line.split() name = ' '.join(split_parts[:-2]) date = split_parts[-2] version = split_parts[-1] return [name, date, version] # 逐行读取并处理 with open(data, 'r', encoding='unicode_escape') as f: processed_rows = [parse_line(line) for line in f] df = pd.DataFrame(processed_rows)
内容的提问来源于stack exchange,提问作者anenhjk
相关产品推荐
相关产品推荐

