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

如何用pandas读取变量名含空格、分隔符为不规则空白的txt文件数据

解决方案

核心思路

这个文件的结构特征是变量名内部仅含单个空格,变量名与数值、数值与数值之间均通过2个及以上空格分隔,同时存在大量无内容空行、变量名末尾用连续点做填充。我们可以用正则分隔符匹配多空格拆分列,再清洗变量名即可。

完整代码

import pandas as pd

df = pd.read_csv(
    "https://www.bls.gov/cpi/tables/relative-importance/2019.txt",
    sep=r'\s{2,}',  # 匹配2个及以上空白作为分隔符,避免拆分带单个空格的变量名
    skip_blank_lines=True,  # 跳过空行
    header=None,  # 原文件无表头
    engine='python',  # 需用Python引擎支持正则分隔符
    skiprows=7,  # 跳过文件前7行的说明性表头,可根据实际需要调整数值
    names=['指标名称', '2019年权重', '2017-2018年权重']  # 可自定义列名,对应文件两列数值的实际含义
)

# 清洗指标名称:删除末尾填充用的连续点,保留原始缩进(如果不需要保留缩进可追加.str.strip())
df['指标名称'] = df['指标名称'].str.replace(r'\.+$', '', regex=True)

# 可选:提取指标层级,数值越小层级越高(如All items层级为0,Food and beverages为1)
df['层级'] = df['指标名称'].apply(lambda x: len(x) - len(x.lstrip()))

常见问题说明

  • 如果出现列数不匹配的情况,可以调整skiprows参数,跳过更多开头的说明行;也可以添加on_bad_lines='skip'参数跳过格式异常的行
  • 如果不需要保留指标的缩进层级,在清洗指标名称时改为.str.replace(r'\.+$', '', regex=True).str.strip()即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 17:36:03