如何在每次运行程序时向Pandas DataFrame中迭代添加新行(避免替换原有行)
解决Pandas DataFrame每次运行程序追加新行而非覆盖的问题
你的问题根源很清晰:每次运行程序时,你都重新创建了一个空的DataFrame,之前运行程序添加的行根本没有被保存下来,所以每次看起来都是“替换”了之前的行——实际上每次都是一个全新的DataFrame只包含当前这一行。
要实现跨程序运行会话的行追加,核心是把数据持久化存储到文件中(比如CSV、Excel或其他格式),每次运行程序时先读取已有的数据,再追加新行,最后保存回去。
具体解决方案(以CSV文件为例)
下面是修改后的代码逻辑,包含数据持久化的步骤:
import pandas as pd import os # 定义存储数据的文件路径,你可以根据自己的需求修改 data_file = "payroll_records.csv" # 第一步:读取已有数据(如果文件存在),否则创建空DataFrame if os.path.exists(data_file): # 读取已有的数据 df = pd.read_csv(data_file) else: # 文件不存在时,创建初始空DataFrame df = pd.DataFrame(columns=['Mois','Nom','Adresse','Net_payé','Total_versé']) # 你的原有业务逻辑:获取动态变量(这里假设mylist、mois、nom、adresse已经正确定义) net_index = mylist.index('NET PAYE EN EUROS ') net = mylist[net_index + 2] total_index = mylist.index('CONGES ') total = mylist[total_index - 1] # 创建新行的字典 new_row = { 'Mois': mois, 'Nom': nom, 'Adresse': adresse, 'Net_payé': net, 'Total_versé': total } # 追加新行到DataFrame(兼容Pandas新版本的写法) new_df = pd.DataFrame([new_row]) df = pd.concat([df, new_df], ignore_index=True) # 第二步:将更新后的DataFrame保存回文件,确保数据持久化 df.to_csv(data_file, index=False, encoding='utf-8')
关键说明
- 数据持久化:通过
os.path.exists检查文件是否存在,存在就读取已有数据,不存在才创建空DataFrame,这样每次运行程序都能基于历史数据追加。 - 新版本Pandas兼容:
append方法在Pandas 2.0+已被标记为过时,推荐使用pd.concat的方式来追加行,避免后续版本的兼容性问题。 - 文件保存细节:
to_csv的index=False参数可以避免保存时自动添加索引列,保持数据整洁;encoding='utf-8'确保特殊字符(比如法语字符)能正确存储。
可选方案:使用Excel文件
如果你更习惯用Excel存储,只需要把读取和保存的方法替换成Excel相关的API即可(需要提前安装openpyxl:pip install openpyxl):
# 读取Excel文件 df = pd.read_excel(data_file, engine='openpyxl') # 保存回Excel文件 df.to_excel(data_file, index=False, engine='openpyxl')
这样修改后,每次运行程序时,新的行就会追加到已有数据的末尾,而不是从头开始创建新的DataFrame了。
内容的提问来源于stack exchange,提问作者Fleur
相关产品推荐
相关产品推荐

