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

如何在Python DataFrame中按条件用字典替换列值?

问题:仅在指定条件行替换DataFrame列值

现有数据

DataFrame定义及输出

import pandas as pd

df = pd.DataFrame({'col1': {0: '4', 1: '4', 2: '2'},'col2': {0: 'USA', 1: 'England', 2: 'Japan'}})

输出:

col1     col2
0    4      USA
1    4  England
2    2    Japan

映射字典

dict_1 = {"USA" : 'Washington',"Japan" : 'Tokyo',"England" : 'London'}

需求说明

仅在col1等于'2'的行中,使用dict_1替换col2的对应值,期望输出:

col1     col2
0    4      USA
1    4  England
2    2    Tokyo

尝试的无效方法

以下代码无法修改原DataFrame:

df.loc[df['col1'] == '2', 'col2'].replace(dict_1,inplace=True)

原因分析

上述代码无效的核心原因是:df.loc[df['col1'] == '2', 'col2']返回的可能是原数据的副本而非视图,此时inplace=True仅会修改这个临时副本,不会对原DataFrame产生影响。

正确解决方法

方法一:直接赋值+map映射

df.loc[df['col1'] == '2', 'col2'] = df.loc[df['col1'] == '2', 'col2'].map(dict_1)

map(dict_1)会将符合条件的col2值按字典映射替换,直接赋值回切片位置,确保修改原DataFrame。

方法二:replace赋值(无需inplace)

df.loc[df['col1'] == '2', 'col2'] = df.loc[df['col1'] == '2', 'col2'].replace(dict_1)

通过直接将替换后的结果赋值到目标切片,绕过副本/视图的问题,直接修改原数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 15:00:17