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

如何用Pandas处理末尾带分隔符的文本文件?

问题解决:清洗分号分隔文本文件,生成规范DataFrame

问题根源

你的问题出在两个地方:

  1. 原始文件列名自带末尾空格,且每行数据结尾的;;被pd.read_csv解析成了空列,导致出现NaN
  2. 当前读取参数没处理这些冗余内容

解决方案代码

直接调整pd.read_csv的参数,再配合列名清洗,就能批量处理同格式文件:

import pandas as pd
from io import BytesIO
import os

def process_txt_file(file_path, config, dataHeader=0, dataSkipFooter=0):
    with open(file_path, "rb") as f:
        file_io_obj = BytesIO(f.read())
    
    if config['file_type'] == 'txt':
        # 核心参数调整,解决空格和空列问题
        df = pd.read_csv(
            file_io_obj,
            header=dataHeader,
            skipfooter=dataSkipFooter,
            dtype=str,
            sep=config['file_separator'],
            skipinitialspace=True,  # 自动去掉字段和列名的首尾空格
            usecols=lambda col: col.strip() != '',  # 过滤末尾;;生成的空列
            engine='python'  # 必须用python引擎才能支持skipfooter
        )
        # 最后再统一清洗列名的首尾空格
        df.columns = df.columns.str.strip()
        return df

# 单文件测试调用
config = {'file_type': 'txt', 'file_separator': ';'}
df = process_txt_file('你的文件路径.txt', config)
print(df.head())

# 多文件批量处理示例
file_dir = '你的文件目录'
file_list = [os.path.join(file_dir, f) for f in os.listdir(file_dir) if f.endswith('.txt')]
processed_dfs = []
for fp in file_list:
    processed_df = process_txt_file(fp, config)
    processed_dfs.append(processed_df)
    # 这里可以加保存或后续处理逻辑,比如 processed_df.to_csv(f'cleaned_{fp}', index=False)

参数说明

  • skipinitialspace=True:自动移除列名和数据字段的首尾空格,解决列名带空格的问题
  • usecols=lambda col: col.strip() != '':过滤掉因末尾;;生成的空列,避免出现NaN
  • engine='python':默认的C引擎不支持skipfooter,必须指定Python引擎才能生效

处理后就能得到你想要的规范格式:列名无空格,无多余NaN列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 15:00:59