如何批量删除文件夹中所有文本文件的指定多列?
批量处理TXT文件删除指定列的解决方案
原代码问题分析
你当前的代码错误使用了pd.concat([main_dataframe,df],axis=1),会把每个文件的列横向拼接,导致同一列名重复数百次,完全不符合需求;同时代码没有执行删列操作,也没有保存处理结果。
方案一:逐个处理每个文件并删除指定列
如果需要给每个文件单独删除指定列(可选择覆盖原文件或保存为新文件),使用以下代码:
import glob import pandas as pd folder_path = 'Desktop/GRB/data/k1/' cols_to_drop = [0, 1, 3] # 要删除的列索引 # 遍历所有txt文件 for file_path in glob.glob(folder_path + "/*.txt"): # 读取空格分隔的文本文件 df = pd.read_csv(file_path, delimiter=r"\s+") # 删除指定列 df = df.drop(df.columns[cols_to_drop], axis=1) # 覆盖原文件(不想覆盖的话,可改成保存新文件) df.to_csv(file_path, sep=' ', index=False) # 保存新文件示例: # new_file = file_path.replace('.txt', '_processed.txt') # df.to_csv(new_file, sep=' ', index=False)
方案二:合并所有文件后删除指定列
如果需要把所有文件的数据合并成一个大文件再删列,使用以下代码:
import glob import pandas as pd folder_path = 'Desktop/GRB/data/k1/' cols_to_drop = [0, 1, 3] all_dataframes = [] # 读取所有文件并收集DataFrame for file_path in glob.glob(folder_path + "/*.txt"): df = pd.read_csv(file_path, delimiter=r"\s+") all_dataframes.append(df) # 纵向合并所有数据(axis=0按行拼接,ignore_index重置行索引) merged_df = pd.concat(all_dataframes, axis=0, ignore_index=True) # 删除指定列 merged_df = merged_df.drop(merged_df.columns[cols_to_drop], axis=1) # 保存合并处理后的文件 merged_df.to_csv(f"{folder_path}/merged_processed.txt", sep=' ', index=False)
关键说明
pd.read_csv的delimiter=r"\s+"可正确解析空格分隔的文本,不管连续空格数量多少都能识别为分隔符df.drop(df.columns[cols_to_drop], axis=1)就是你需要的删列代码,放在读取文件之后、保存之前即可生效to_csv时指定sep=' '保证输出为空格分隔格式,index=False避免生成多余的行索引列
内容的提问来源于stack exchange,提问作者Erin Corcoran
相关产品推荐
相关产品推荐

