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

如何更高效地向已有DataFrame追加新数据?(Python)

高效向Pandas DataFrame追加数据的优化方案

问题描述

在Python中,是否存在更高效的方式向已有DataFrame追加新数据?如下例所示,先导入现有DataFrame(frame_orig),执行相关代码生成新值后,将其追加至原DataFrame再导出。当前方法可正常运行,但当原DataFrame数据量过大时,整个流程耗时较长。请问是否可以直接以列表形式追加新值,或是通过调整原DataFrame的类型来优化?

用户示例代码:

import pandas as pd

#frame_orig = pd.read_csv('C:/path/to/file/frame_orig.csv')

frame_orig = pd.DataFrame({'Val1': ['1','2'],
               'Val2': ['3','4'],
                })

##some code

new_Val1 = '5000'
new_Val2 = '6000'

newvalues = []

newvalues.append([new_Val1, new_Val2])

df_values = pd.DataFrame(newvalues, columns = ['Val1','Val2'])

new_df = pd.concat([frame_orig, df_values], ignore_index=True)

优化方案

1. 单行追加:直接使用loc赋值

如果仅追加单行数据,无需创建临时DataFrame,直接通过loc定位到新行赋值,避免额外的内存开销:

# 直接追加单行
frame_orig.loc[len(frame_orig)] = [new_Val1, new_Val2]

注意:若需频繁追加大量行,不建议逐行调用loc,因为每次操作都会触发DataFrame的内存重分配,累积下来性能会下降。

2. 批量追加:先攒数据再一次性合并

如果要追加多行,先把所有新数据收集到列表中,最后一次性转换为DataFrame并合并,这是批量场景下效率最高的方式:

# 批量收集新数据
new_data_list = []
new_data_list.append(['5000', '6000'])
new_data_list.append(['7000', '8000'])
# 可循环生成更多数据...

# 一次性合并到原DataFrame
frame_orig = pd.concat(
    [frame_orig, pd.DataFrame(new_data_list, columns=frame_orig.columns)],
    ignore_index=True
)

这种方式减少了多次内存操作的次数,尤其适合原DataFrame数据量较大的场景。

3. 优化数据类型降低内存占用

如果原DataFrame的列类型存在优化空间(比如示例中Val1、Val2存储为字符串,但实际是数值),提前指定或转换类型能大幅减少内存占用,间接提升后续所有操作的速度:

# 读取CSV时直接指定列类型
frame_orig = pd.read_csv(
    'C:/path/to/file/frame_orig.csv',
    dtype={'Val1': int, 'Val2': int}
)

# 或者对已有的DataFrame转换类型
frame_orig = frame_orig.astype({'Val1': int, 'Val2': int})

内存占用降低后,合并、导出等IO密集型操作的速度会明显提升。

4. 旧版本兼容:使用append(不推荐)

如果你的环境仍在使用Pandas 2.0以下版本,可以用append方法简化单行追加,但该方法已被官方标记为弃用,优先推荐前面的方案:

# 仅适用于Pandas 2.0以下版本
frame_orig = frame_orig.append(
    pd.Series([new_Val1, new_Val2], index=frame_orig.columns),
    ignore_index=True
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 13:35:28