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

读取TXT文件ppm单列并以文件名命名列,解决DataFrame碎片化警告

实现方案

核心思路是先把所有处理好的列统一存入列表,最后一次性合并,既避免重复列名问题,也不会触发碎片化警告:

import glob
import os
import pandas as pd

path = "你的文件目录路径"
all_files = glob.glob(os.path.join(path, "*.txt"))
# 初始化列表存储所有待合并的列
ppm_col_list = []

for file in all_files:
    file_name = os.path.basename(file)
    # 只读ppm列,将单列DataFrame转为Series后重命名为当前文件名
    s = pd.read_csv(file, sep='\s+', header=0, usecols=['ppm']).squeeze("columns")
    s.name = file_name
    ppm_col_list.append(s)

# 一次性合并所有列
df_final = pd.concat(ppm_col_list, axis=1)

关键说明

  • 用usecols=['ppm']只读需要的列减少内存占用,搭配squeeze("columns")把单列DataFrame转为更轻便的Series操作
  • 循环内仅做读数据、重命名、存入列表的操作,不修改最终DataFrame,避免频繁内存重分配
  • 仅调用一次pd.concat完成全量列合并,完全符合pandas高性能操作规范,不会触发碎片化警告

原两种实现的问题说明:

  1. 第一种实现读取后没有修改列名就直接合并,导致所有列都保留原列名ppm
  2. 第二种实现循环内反复给已有DataFrame新增列,会触发多次内存拷贝和数据挪动,文件量较大时就会出现碎片化警告

如果需要兼容缺失ppm列的异常文件,可以修改循环逻辑增加异常捕获:

for file in all_files:
    file_name = os.path.basename(file)
    try:
        s = pd.read_csv(file, sep='\s+', header=0, usecols=['ppm']).squeeze("columns")
        s.name = file_name
        ppm_col_list.append(s)
    except ValueError:
        print(f"文件{file_name}中无ppm列,已跳过")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 20:36:00