使用pandas读取换行包裹文本文件时无法正确拆分多列如何解决
问题原因
- 你的数据不属于常规的「一行一条记录」格式:单条记录跨越多行,直到遇到分号
;才标记结束 - 列之间的分隔符是任意数量的空白(空格、缩进、换行),
;是记录终止符而非列分隔符,直接用read_fwf/read_csv的按行读取逻辑完全不匹配格式,才会出现所有内容挤在同一列的问题 - 你贴的原始代码末尾多写了一个
],本身存在语法错误,即使格式匹配也无法正常运行
可行解决方案
先按记录终止符;拆分出所有完整记录,再统一清理每条记录里的换行、多空格等冗余空白,拆分出单独字段后转成DataFrame即可,代码如下:
import pandas as pd import re # 读取完整原始文本 with open("file.txt", "r", encoding="utf-8") as f: raw_content = f.read() # 按分号拆分单条记录,过滤空内容 raw_records = [item.strip() for item in raw_content.split(";") if item.strip()] # --- 如果需要保留原逻辑里跳过开头41段、结尾45段的需求,放开下面这行注释即可 # raw_records = raw_records[41:-45] # 逐条清理记录、拆分字段 parsed_rows = [] for record in raw_records: # 将所有换行、多空格、制表符统一替换为单个空格 clean_record = re.sub(r"\s+", " ", record).strip() # 按空格拆分出单个属性字段 fields = clean_record.split(" ") parsed_rows.append(fields) # 转为DataFrame,自动将数值类字段转为数字类型,NA自动识别为空值 df = pd.DataFrame(parsed_rows).apply(pd.to_numeric, errors="ignore")
效果说明
运行后每条记录的每个数值/属性会单独存在一列,跨多行的记录内容会自动合并到同一行,不会出现内容错位、堆在单列的问题。
内容的提问来源于stack exchange,提问作者Podasaurus
相关产品推荐
相关产品推荐

