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

每次更新后将DataFrame数据追加保存至CSV而非覆盖的实现方法

如何在Pandas中追加数据到CSV文件而不覆盖历史数据

问题描述

从服务器获取Entry、Middle、Exit格式的数据,希望每次更新后将数据存入DataFrame并追加保存到abc.csv文件中,但当前代码运行时总是覆盖原有历史数据,即使循环执行5次,CSV文件中也仅保留最后一条数据。

原代码如下:

df = pd.DataFrame(columns=['Entry','Middle','Exit'])
def function():
    entry_value = 178.184 # data comming from server
    middle_value = 14.121 # data comming from server
    exit_value = 19.21 # data comming from server
    df1 = df.append({'Entry' : entry_value , 'Middle' : middle_value, 'Exit' : exit_value}, ignore_index = True)
    df1.to_csv('abc.csv')
 
i = 0
while i < 5:
    function()
    i += 1

注:示例中数据为硬编码,实际数据来自服务器,格式一致。

问题原因

  1. 每次调用function()时,都是基于初始空DataFramedf进行append,生成的df1始终只有1条数据,写入时直接覆盖之前的文件内容。
  2. to_csv()默认使用mode='w'(写入模式),会直接清空原有文件后写入新内容。

解决方案

方案1:直接追加单条数据到CSV(推荐)

将单条数据转为小型DataFrame,使用mode='a'追加到文件,同时处理表头重复问题:

import pandas as pd
import os

def function():
    entry_value = 178.184 # 实际数据来自服务器
    middle_value = 14.121
    exit_value = 19.21
    # 把单条数据转为DataFrame格式
    new_row = pd.DataFrame({'Entry': [entry_value], 'Middle': [middle_value], 'Exit': [exit_value]})
    # 判断文件是否存在,决定是否写入表头
    need_header = not os.path.exists('abc.csv')
    # 追加模式写入CSV,不写入索引列
    new_row.to_csv('abc.csv', mode='a', index=False, header=need_header)

i = 0
while i < 5:
    function()
    i += 1

方案2:维护全局DataFrame保存全量数据

如果需要在内存中保留所有历史数据,可以初始化时读取已有文件(如果存在),每次追加新数据后覆盖写入全量数据:

import pandas as pd
import os

# 初始化DataFrame:文件存在就读取历史数据,不存在则创建空表
if os.path.exists('abc.csv'):
    df = pd.read_csv('abc.csv')
else:
    df = pd.DataFrame(columns=['Entry','Middle','Exit'])

def function():
    global df
    entry_value = 178.184 # 实际数据来自服务器
    middle_value = 14.121
    exit_value = 19.21
    # 追加新数据到全局DataFrame
    df = df.append({'Entry': entry_value, 'Middle': middle_value, 'Exit': exit_value}, ignore_index=True)
    # 写入全量数据到CSV
    df.to_csv('abc.csv', index=False)

i = 0
while i < 5:
    function()
    i += 1

关键参数说明

  • mode='a':将文件打开模式设为追加,新数据会添加到文件末尾而非覆盖原有内容。
  • header=need_header:通过判断文件是否存在,确保只有第一次写入时添加表头,避免重复生成表头行。
  • index=False:禁止将DataFrame的索引列写入CSV,保持数据格式整洁。

内容的提问来源于stack exchange,提问作者khan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 01:50:31