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

如何高效向DataFrame添加行?附含主键的历史定价数据集片段

高效向带复合主键的DataFrame添加行的方法

嘿,针对你这个要给以(id, p_date)为复合主键的DataFrame高效添加行的需求,我整理了几个亲测好用的方案——毕竟之前踩过逐行添加的大坑,效率差到离谱,所以重点说高效的批量方法:

1. 批量添加首选:pd.concat(效率最高)

Pandas里绝对不要循环用df.append()逐行添加,因为DataFrame是不可变对象,每次append都会生成新的DataFrame,数据量稍大就会卡到崩溃。正确姿势是把要添加的所有行先整理成新的DataFrame,再用concat合并,最后去重保证主键唯一:

import pandas as pd

# 假设你的原DataFrame是original_df
# 先准备好要添加的新数据(可以是列表字典、另一个DataFrame)
new_rows = [
    {"id": "038af19179925da21a25619c5a24b745", "p_date": "2015-04-01", "price": 99.9},
    {"id": "new_customer_001", "p_date": "2024-05-01", "price": 129.9},
    {"id": "new_customer_002", "p_date": "2024-05-01", "price": 89.9}
]
new_df = pd.DataFrame(new_rows)

# 合并原数据和新数据,同时根据复合主键去重,保留最新的行(如果有重复)
combined_df = pd.concat([original_df, new_df]).drop_duplicates(subset=["id", "p_date"], keep="last")

# 如果需要替换原DataFrame,直接赋值即可
original_df = combined_df

2. 少量单行添加:用df.loc直接赋值

如果只是偶尔添加1-2行,也可以用loc直接定位到新行的位置赋值,但记得先校验主键是否存在,避免重复:

# 定义要添加的单行数据
new_row = {"id": "new_customer_003", "p_date": "2024-06-01", "price": 109.9}

# 先检查复合主键是否已存在
is_duplicate = ((original_df["id"] == new_row["id"]) & (original_df["p_date"] == new_row["p_date"])).any()

if not is_duplicate:
    original_df.loc[len(original_df)] = new_row
else:
    print("该主键组合已存在,跳过添加")

3. 超大数据量场景:用Dask并行处理

如果要添加的行达到百万级甚至更多,内存不够用的话,可以用dask.dataframe来并行处理,它能分块加载数据,避免内存溢出:

import dask.dataframe as dd

# 把原DataFrame转成Dask DataFrame
ddf = dd.from_pandas(original_df, npartitions=4)

# 新数据也转成Dask DataFrame
new_ddf = dd.from_pandas(new_df, npartitions=1)

# 合并并去重
combined_ddf = dd.concat([ddf, new_ddf]).drop_duplicates(subset=["id", "p_date"], keep="last")

# 转回Pandas DataFrame(如果需要的话)
original_df = combined_ddf.compute()

额外注意事项

  • 统一日期格式:把p_date列转成datetime类型,避免后续出现格式问题:original_df["p_date"] = pd.to_datetime(original_df["p_date"])
  • 列名一致性:新添加的行要和原DataFrame列名完全一致,否则会出现NaN值
  • 主键唯一性校验:无论用哪种方法,都要确保添加后(id, p_date)没有重复,否则会破坏数据集的主键规则

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:07:17