Pandas读取文本文件时自动添加多余0列的问题排查
解决Pandas导入单值文本文件时新增0列的问题
我来帮你拆解一下你遇到的问题:你要把目录下每个仅含单个内存数值的文本文件导入合并成一个DataFrame,但每次添加文件时,DataFrame都会莫名多出一列值为0的列,首行也只有0,这显然和你的预期不符。
问题根源分析
你的代码里有两个关键地方导致了这个问题:
pd.read_csv的参数选择不当
你用了delim_whitespace=True,这个参数是告诉Pandas按任意空白字符(空格、制表符等)分割列。但你的每个文本文件里只有单个数值,没有任何空白分隔符。这时候Pandas在解析时,若文件末尾存在换行符(几乎所有文本文件都会有),就可能误判出一个空的第二列,后续合并时这些空值会被填充为0,就出现了你看到的额外列。已弃用的
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
相关产品推荐
相关产品推荐

