Pandas逐行写入多txt文件数据时dataframe自动重置丢失数据如何解决?
问题根因
你遇到的DataFrame自动清空历史数据的问题来自两个核心逻辑错误:
- DataFrame的初始化代码放在了单文件处理循环内部,每次处理新文件都会创建全新的空df,直接覆盖之前已经写入了数据的旧df
- 清空文件夹的逻辑位置错误,当前你每处理完一个文件就会删除整个文件夹下的所有内容,还没来得及读取的后续文件会被直接删除,自然无法写入数据
另外你的代码还存在列名不匹配的问题:初始化df时指定的列名是ColA、ColB,但append数据时用的键是V、I,会导致数据存到错误的列或者出现空值。
修改方案
你需要调整3部分代码:
- 将DataFrame初始化代码移到所有文件遍历逻辑的最外层,全局只初始化一次
- 将清空文件夹的逻辑移到所有文件全部处理完成之后,避免提前删除未读文件
- 统一列名,同时建议用
pd.concat替代已经废弃的append方法,避免版本兼容告警
修改后的代码示例
import pandas as pd import glob import os from io import StringIO # 全局初始化一次DataFrame,统一列名 df = pd.DataFrame(columns = ['ColA', 'ColB']) # 遍历所有待处理txt文件,可替换为你自己的文件生成/遍历逻辑 file_list = glob.glob('C:/Users/chent/Desktop/Device_Test/*.txt') for file in file_list: with open('C:/Users/chent/Desktop/Device_Test/' + file, "r") as curr_file: content = curr_file.readlines() count = 0 # 包含"V(Status)"的行的下一行是目标行 for val in content: if val.find("V(Status)")==-1: count+=1 else: count+=1 line = content[count] # 解析目标行 TESTDATA = list(line.split()) curr_V = TESTDATA[0] curr_I = TESTDATA[1] # 统一用初始化的列名写入数据,用concat替代废弃的append new_row = pd.DataFrame([{'ColA' : curr_V, 'ColB' : curr_I}]) df = pd.concat([df, new_row], ignore_index=True) # 所有文件处理完成后再执行清空文件夹操作 del_file_list = glob.glob('C:/Users/chent/Desktop/Device_Test/*') for f in del_file_list: os.remove(f) # 输出最终合并结果 print(df)
内容的提问来源于stack exchange,提问作者Stephen1999
相关产品推荐
相关产品推荐

