如何在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
相关产品推荐
相关产品推荐

