使用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
相关产品推荐
相关产品推荐

