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

如何用字典为Pandas Series赋值及覆盖DataFrame指定行

用多个字典覆盖Pandas DataFrame指定行的方法

刚好遇到过类似的需求,其实有两种很直观的方式可以实现,我结合你的示例给你一步步说明:

首先先重现你的初始DataFrame:

import pandas as pd
data = {'A': range(3), 'B': range(3, 0, -1), 'C': [4, 0, 2]}
df = pd.DataFrame(data)
# 初始输出
#    A  B  C
# 0  0  3  4
# 1  1  2  0
# 2  2  1  2

假设你要覆盖第0行,用到的两个字典:

d1 = {'A': 1, 'C': 1}
d2 = {'B': 2}

方法1:合并字典后一次性赋值

先把多个字典合并成一个完整的更新字典,再用loc定位目标行赋值,Pandas会自动匹配列名,只更新字典里存在的列:

# 合并字典(Python 3.5+支持的语法)
update_dict = {**d1, **d2}
# 定位第0行并赋值
df.loc[0] = update_dict

# 执行后输出的df就是你想要的结果:
#    A  B  C
# 0  1  2  1
# 1  1  2  0
# 2  2  1  2

如果你的字典里可能包含DataFrame没有的列,不想新增列的话,可以改成只更新存在的列:

# 筛选出DataFrame中存在的键
valid_keys = [key for key in update_dict if key in df.columns]
df.loc[0, valid_keys] = [update_dict[key] for key in valid_keys]

方法2:逐个字典调用update方法

如果你不想合并字典,也可以直接对目标行的Series逐个调用update方法,它会原地更新匹配的列:

# 先更新d1的内容
df.loc[0].update(d1)
# 再更新d2的内容
df.loc[0].update(d2)

这个方法的好处是如果你的字典是动态生成的(比如循环里逐个拿到的),可以直接循环调用update,不用先收集所有字典。

两种方法都能达到你要的效果,选哪种看你的实际场景就行~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:16:48