如何正确读取含空列项的TXT文件为Pandas DataFrame?
解析含空列的固定格式空格分隔TXT文件
问题场景
给定以下格式的TXT文件,明确包含球队、编号、球员名、国家四列,其中部分行的球员名列为空:
Arsenal 123 UK Barcelona 456 Marc-Andre Ter Stegen ES Chelsea 789 Ceasr Azpilicueta UK
直接用str.split()按多空格分割时,会出现国家代码错位到第三列的问题,目标是得到如下结构化DataFrame:
| 球队 | 编号 | 球员名 | 国家 |
|---|---|---|---|
| Arsenal | 123 | NaN | UK |
| Barcelona | 456 | Marc-Andre Ter Stegen | ES |
| Chelsea | 789 | Cesar Azpilicueta | UK |
解决方案
方法1:用read_fwf解析固定宽度文件(推荐)
该文件本质是固定宽度格式,直接指定列宽度即可精准解析:
import pandas as pd # 根据文本实际列宽定义,可按需调整 column_widths = [10, 6, 25, 3] df = pd.read_fwf('your_file.txt', widths=column_widths, names=['球队', '编号', '球员名', '国家']) # 将空白字符串转换为标准空值 df['球员名'] = df['球员名'].str.strip().replace('', pd.NA) print(df)
方法2:正则分割+列修正
如果无法确定固定宽度,可用正则匹配分割后修正错位列:
import pandas as pd # 按多空格分割,但保留含空格的球员名(正则确保分割逻辑适配列结构) df = pd.read_csv('your_file.txt', header=None, sep=r'\s+(?=\S)', engine='python') # 修正行结构:仅3个元素的行,将第三列移至第四列,第三列设为空 def fix_row(row): if len(row.dropna()) == 3: return pd.Series([row[0], row[1], pd.NA, row[2]]) return row df = df.apply(fix_row, axis=1) df.columns = ['球队', '编号', '球员名', '国家'] print(df)
内容的提问来源于stack exchange,提问作者Jacky Man
相关产品推荐
相关产品推荐

