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

如何在每次运行程序时向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')

关键说明

  1. 数据持久化:通过os.path.exists检查文件是否存在,存在就读取已有数据,不存在才创建空DataFrame,这样每次运行程序都能基于历史数据追加。
  2. 新版本Pandas兼容:append方法在Pandas 2.0+已被标记为过时,推荐使用pd.concat的方式来追加行,避免后续版本的兼容性问题。
  3. 文件保存细节: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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 10:22:26