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

Pandas读取文本文件时自动添加多余0列的问题排查

解决Pandas导入单值文本文件时新增0列的问题

我来帮你拆解一下你遇到的问题:你要把目录下每个仅含单个内存数值的文本文件导入合并成一个DataFrame,但每次添加文件时,DataFrame都会莫名多出一列值为0的列,首行也只有0,这显然和你的预期不符。

问题根源分析

你的代码里有两个关键地方导致了这个问题:

  1. pd.read_csv的参数选择不当
    你用了delim_whitespace=True,这个参数是告诉Pandas按任意空白字符(空格、制表符等)分割列。但你的每个文本文件里只有单个数值,没有任何空白分隔符。这时候Pandas在解析时,若文件末尾存在换行符(几乎所有文本文件都会有),就可能误判出一个空的第二列,后续合并时这些空值会被填充为0,就出现了你看到的额外列。

  2. 已弃用的append方法的行为问题
    final_df.append(df)这种写法在Pandas 2.0之后已经被弃用,更关键的是,当你往空的DataFrame里append单个值的DataFrame时,Pandas的列对齐机制可能出现异常,尤其是当解析出的临时df存在隐含空列时,合并后就会把这些空列显式填充为0,导致不符合预期的结果。

正确的解决方法

我们可以调整读取和合并的方式,确保只保留数值列:

import os
import pandas as pd

text_path = "/home/tdun0002/stash/cloud_scripts/aws_scripts/output_files/memory_stats/text/"
filelist = os.listdir(text_path)
final_df = pd.DataFrame()

for filename in filelist:
    my_file = os.path.join(text_path, filename)  # 用os.path.join更安全,避免路径拼接出错
    try:
        # 读取单个值的文本文件,用usecols指定只取第一列
        df = pd.read_csv(my_file, header=None, usecols=[0])
        
        # 用pd.concat替代append,更稳定且是官方推荐用法
        final_df = pd.concat([final_df, df], ignore_index=True)
        
        # 设置显示所有行(之前的代码只是获取属性,没有修改设置)
        pd.set_option('display.max_rows', None)
        print(f"\n***Full Data Frame:\n{final_df}\n***")
    except Exception as e:
        print(f"处理文件{filename}时出错: {e}")

额外优化建议

  • 用os.path.join拼接路径,避免因为不同系统的路径分隔符导致错误;
  • 添加异常捕获的具体信息,方便排查个别文件的问题;
  • 如果文件是固定宽度的单值格式,也可以用pd.read_fwf(my_file, header=None)替代pd.read_csv,解析更精准。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 18:02:54