Python案例:如何用Pandas做数据追加函数?从基础到高效实战
目录导读
数据追加的核心场景与应用价值
在日常数据开发中,我们经常面临这样的需求:从多个来源(API接口、日志文件、数据库查询)获取数据后,需要不断向已有的数据集末尾添加新记录。

- 电商平台每天定时追加当日订单数据到历史订单表
- 物联网设备每隔5分钟追加传感器的实时读数
- 金融分析师追加最新交易日行情到分析数据框
传统的Python列表追加虽然简单,但面对结构化表格数据时,Pandas的DataFrame追加函数才是真正的利器。
Pandas中追加数据的四大核心方法
方法1:pd.concat() —— 最推荐的追加方式
import pandas as pd
# 创建两个DataFrame
df1 = pd.DataFrame({'A': [1,2], 'B': [3,4]})
df2 = pd.DataFrame({'A': [5], 'B': [6]})
# 纵向追加(行追加)
result = pd.concat([df1, df2], ignore_index=True)
print(result)
关键参数:ignore_index=True,否则会保留原始行索引,导致索引重复。axis=0表示行方向追加,默认值。
方法2:DataFrame.append() —— 已弃用但仍有参考价值
# 旧版本写法(Pandas 1.4.0 之前) result = df1.append(df2, ignore_index=True)
注意:官方已在Pandas 2.0中完全移除该方法,推荐直接使用concat。
方法3:DataFrame._append() —— 内部方法慎用
极少数情况使用,属于私有API,不推荐在正式代码中使用。
方法4:loc定位追加 —— 单行追加的“黑魔法”
# 通过loc定位到新行号,直接赋值
new_row = {'A': 7, 'B': 8}
df1.loc[len(df1.index)] = new_row
适用场景:逐行追加少量数据(<1000行)时性能较好。
实战案例:从CSV文件到数据库的完整追加流程
场景描述
某电商平台每天凌晨生成订单文件orders_20250101.csv,需要将其追加到orders_history.csv中。
完整代码实现
import pandas as pd
import os
def append_csv_to_master(new_file, master_file):
"""
将新CSV文件追加到主文件
"""
# 1. 读取新数据
new_data = pd.read_csv(new_file)
# 2. 数据清洗(可选)
new_data['append_date'] = pd.Timestamp('today').strftime('%Y-%m-%d')
# 3. 追加到主文件
if os.path.exists(master_file):
master = pd.read_csv(master_file)
# 防止列顺序不一致
new_data = new_data[master.columns]
combined = pd.concat([master, new_data], ignore_index=True)
else:
combined = new_data # 第一次追加,直接作为主文件
# 4. 写回文件
combined.to_csv(master_file, index=False)
return f"成功追加{len(new_data)}条记录"
# 执行函数
result = append_csv_to_master('orders_20250101.csv', 'orders_history.csv')
print(result)
效率提升技巧
- 使用
chunksize参数处理超大文件 - 追加前先合并数据到内存,再一次性写回(减少I/O次数)
常见错误与性能优化技巧
易错点Top3
- 索引未重置:追加后索引重复导致数据分析错误
# 错误 result = pd.concat([df1, df2]) # 正确 result = pd.concat([df1, df2], ignore_index=True)
- 列名不匹配:两个DataFrame列名不一致,concat会创建NaN列
# 解决方案:统一列名或使用join='inner' pd.concat([df1, df2], join='inner') # 只保留共有列
- 数据类型不一致:int列和float列追加后变成object类型
# 使用dtypes检查并统一类型 df2['A'] = df2['A'].astype(int)
性能优化要点
| 场景 | 推荐方法 | 原因 |
|---|---|---|
| 少量记录(<1000) | loc定位追加 |
避免创建新对象 |
| 中等数据(1000~10万) | pd.concat() |
内存效率高 |
| 大量数据(>10万) | 分块读取+concat | 防止内存溢出 |
必应SEO友好问答专区
Q1:Pandas中append函数为什么被弃用了?
答:append()方法在Pandas 2.0中被正式移除,主因是它容易引发链式索引警告,而pd.concat()具有更好的性能、更清晰的语法和更大的灵活性,建议所有新项目直接使用concat()。
Q2:如何追加大型CSV文件而不耗尽内存?
答:采用分块读取策略:
chunks = []
for chunk in pd.read_csv('large_file.csv', chunksize=10000):
chunks.append(chunk)
result = pd.concat(chunks, ignore_index=True)
或使用Dask库处理超大数据集。
Q3:追加数据时如何保持索引有序?
答:使用ignore_index=True参数会自动创建0~N-1的新索引,如需自定义索引,可在concat前重置主数据索引:master.reset_index(drop=True, inplace=True)。
Q4:对于重复行的追加,如何自动去重?
答:在追加后使用drop_duplicates()方法:
combined = pd.concat([master, new_data], ignore_index=True) combined = combined.drop_duplicates(subset=['order_id'], keep='last')
通过本文的实战案例与搜索引擎优化技巧,您已掌握Pandas数据追加的核心函数与最佳实践,无论是处理日常报表还是构建数据管道,灵活运用concat()与loc追加策略,将大幅提升数据处理效率。