You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 21:27:29