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

如何用Pandas读取无合适分隔符的CSV:拆分首列与剩余内容

解决方法:将整数+任意字符串的CSV导入Pandas生成两列DataFrame

这个场景我太熟悉了——字符串里混着各种特殊字符,常规的分隔符完全没法用,稍不注意就把字符串拆得七零八落。给你几个实用的解决方案,按需选择:

方法1:用正则表达式作为分隔符(简单快捷)

Pandas的read_csv支持正则分隔符,我们可以利用第一列是整数这个特点,匹配第一个整数后面的空白区域,只分割一次:

import pandas as pd

# 正则表达式含义:匹配紧跟在开头数字后面的一个或多个空格
df = pd.read_csv(
    inputfile,
    sep=r'(?<=^\d+)\s+',  # 核心:只在第一个数字块后分割
    header=None,
    engine='python',  # C引擎不支持复杂正则,必须指定python引擎
    encoding='utf-8'  # 根据你的文件编码调整,比如韩文可能用cp949
)
df.columns = ['number', 'text']

这个方法的优点是代码简洁,不需要手动处理每行,但如果你的文件特别大(比如几十GB),python引擎的速度可能会慢一点。

方法2:逐行读取分割(内存友好,适合超大文件)

如果文件规模很大,逐行处理能有效控制内存占用,而且完全自定义分割逻辑,不会被任何特殊字符干扰:

import pandas as pd

rows = []
with open(inputfile, 'r', encoding='utf-8') as f:
    for line in f:
        line = line.strip()
        if not line:  # 跳过空行
            continue
        # 找到第一个空格的位置,把整数和后面的内容分开
        first_space_idx = line.find(' ')
        if first_space_idx != -1:
            # 提取整数部分,转成int类型
            num = int(line[:first_space_idx])
            # 提取剩余所有内容,保留原始格式
            text_content = line[first_space_idx+1:]
        else:
            # 处理极端情况:整行只有整数没有文本
            num = int(line)
            text_content = ''
        rows.append([num, text_content])

# 转成DataFrame
df = pd.DataFrame(rows, columns=['number', 'text'])

这个方法的灵活性最高,不管字符串里有什么字符(包括换行符以外的所有内容)都能完美保留,而且内存占用比直接用read_csv低很多。

方法3:固定宽度读取(仅当整数位数固定时可用)

如果你的整数列是固定位数的(比如所有整数都是4位),可以用read_fwf(固定宽度格式读取),这个方法速度最快:

import pandas as pd

# widths参数:第一列占4个字符,第二列占剩余所有宽度
df = pd.read_fwf(
    inputfile,
    widths=[4, None],
    header=None,
    encoding='utf-8'
)
df.columns = ['number', 'text']

不过这个方法局限性大,只有整数位数完全固定时才适用,否则会把部分文本拆进第一列。

注意事项

  • 一定要指定正确的文件编码,比如你的例子里有韩文“눈”,如果用默认编码可能会出现乱码,推荐优先尝试utf-8,不行再试试cp949(韩文系统常用编码)。
  • 如果文件里有空白行,记得在处理时跳过,避免报错。

内容的提问来源于stack exchange,提问作者pcsso

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:11:49