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

使用Pandas读取仅空格分隔的txt文件为DataFrame时列拆分错误如何解决

报错原因

该错误是由于电影标题包含多个空格,将空格设置为全局分隔符会把标题内的空格也识别为字段分隔符,导致每行拆分后的字段数量远大于预期的7个,触发解析错误。

解决方案

以下两种方案适配不同使用场景,可按需选择:

方案1:手动拆分字段(兼容性最高,不易出错)

先读取整行内容为单个字符串列,再按规则拆分:第一个元素为imdbID,最后5个元素分别对应year、score、votes、runtime、genres,中间所有内容拼接为电影标题,完全规避标题内空格的干扰。

from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"
import pandas as pd
import numpy as np

# 先读取整行数据,不做拆分
df = pd.read_csv('imdb_top_10000.txt', sep='\t', header=None, names=['raw'])

# 拆分每行内容
split_data = df['raw'].str.split()
labels = ['imdbID','title','year','score','votes','runtime','genres']

# 按规则提取字段
df[labels[0]] = split_data.str[0]
df[labels[2]] = split_data.str[-5]
df[labels[3]] = split_data.str[-4]
df[labels[4]] = split_data.str[-3]
df[labels[5]] = split_data.str[-2]
df[labels[6]] = split_data.str[-1]
# 中间部分拼接为完整标题
df[labels[1]] = split_data.str[1:-5].str.join(' ')

# 调整为目标字段顺序
df = df[labels]

方案2:正则分隔符(代码更简洁)

利用pandas支持正则作为分隔符的特性,仅匹配非标题区域的空格作为分隔符,适合确认imdbID、末尾5个字段均无空格的场景:

from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"
import pandas as pd
import numpy as np

labels = ['imdbID','title','year','score','votes','runtime','genres']
df = pd.read_csv(
    'imdb_top_10000.txt',
    sep=r'^(\S+) | (\S+) (\S+) (\S+) (\S+) (\S+)$',
    engine='python',
    names=labels,
    usecols=range(1,8) # 过滤正则匹配产生的多余空列
)
校验建议

读取完成后可先执行df.head()检查前几行数据,确认标题是否完整、数值字段是否符合预期。如果genres字段本身包含空格,调整方案1的切片规则,修改倒数取值的位数即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 14:45:03