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

