如何用Pandas处理末尾带分隔符的文本文件?
问题解决:清洗分号分隔文本文件,生成规范DataFrame
问题根源
你的问题出在两个地方:
- 原始文件列名自带末尾空格,且每行数据结尾的
;;被pd.read_csv解析成了空列,导致出现NaN - 当前读取参数没处理这些冗余内容
解决方案代码
直接调整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() != '':过滤掉因末尾;;生成的空列,避免出现NaNengine='python':默认的C引擎不支持skipfooter,必须指定Python引擎才能生效
处理后就能得到你想要的规范格式:列名无空格,无多余NaN列。
内容的提问来源于stack exchange,提问作者Mark Andersen
相关产品推荐
相关产品推荐

