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

如何在Pandas中更新指定行列数据且不产生重复行

Pandas DataFrame按条件更新指定列的正确方法

问题场景

需要在Pandas DataFrame中,针对Foo值为2和4的行,更新vals列的数据。

初始数据

Foo Bar  vals
0    0   a     0
1    1   b     1
2    2   c     2
3    3   d     3
4    4   e     4

期望输出

Foo Bar  vals
0    0   a     0
1    1   b     1
2    2   c    78
3    3   d     3
4    4   e    63

错误尝试与结果

使用DataFrame.update()的代码未达到预期,反而修改了错误的行并产生重复的Foo值:

#!/usr/bin/env python3
import pandas as pd

df = pd.DataFrame({'Foo': range(5), 'Bar': list('abcde'), 'vals': range(5)})
print(df)

df.update(
    pd.DataFrame({'Foo': [2, 4], 'vals': [78, 63]})
)

print(df)

执行结果:

Foo Bar  vals
0  2.0   a  78.0
1  4.0   b  63.0
2  2.0   c   2.0
3  3.0   d   3.0
4  4.0   e   4.0

正确实现方法

方法1:布尔索引直接赋值

这是最直观的方式,通过布尔条件筛选目标行,直接更新vals列:

import pandas as pd

df = pd.DataFrame({'Foo': range(5), 'Bar': list('abcde'), 'vals': range(5)})
# 针对单个条件更新
df.loc[df['Foo'] == 2, 'vals'] = 78
df.loc[df['Foo'] == 4, 'vals'] = 63

print(df)

如果需要批量处理多个键值对,可使用字典映射简化操作:

update_map = {2:78, 4:63}
df['vals'] = df['Foo'].map(update_map).fillna(df['vals'])

方法2:修正update()的使用方式

update()是按索引匹配更新的,之前的错误在于未让更新用的DataFrame与原DataFrame索引对齐,且无需包含Foo列。正确写法如下:

import pandas as pd

df = pd.DataFrame({'Foo': range(5), 'Bar': list('abcde'), 'vals': range(5)})
# 创建更新用的DataFrame,索引对应原DataFrame中Foo=2和4的行索引
update_df = pd.DataFrame({'vals': [78, 63]}, index=[2,4])
df.update(update_df)

print(df)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 23:11:00