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

如何在Python中按嵌套列表映射批量替换DataFrame列值?

解决DataFrame指定列按嵌套列表映射替换的问题

我来帮你搞定这个问题!你之前写的循环没生效,核心原因是:遍历df['Country']时拿到的是列元素的副本,修改item变量根本不会同步到原DataFrame里的数据。下面给你几种实用且高效的实现方案:

方法1:转字典+replace矢量化替换(推荐)

这是最简洁、性能最好的方式,利用pandas的矢量化操作,比循环快得多,尤其适合大数据集:

import pandas as pd

df = pd.read_csv('test.csv')
geos = [['Estados Unidos','US - Estados Unidos'],['Estonia','EE - Estonia']]

# 把嵌套列表转换成「旧值:新值」的映射字典
geo_mapping = {old_val: new_val for old_val, new_val in geos}
# 批量替换指定列的匹配值
df['Country'] = df['Country'].replace(geo_mapping)

执行后,原DataFrame里的Estados Unidos会被替换成US - Estados Unidos,不在映射列表里的Perú会保持原样。

方法2:用loc索引精准修改(循环版)

如果一定要用循环实现,得通过索引定位到原DataFrame的行来修改,而不是修改遍历出来的副本:

import pandas as pd

df = pd.read_csv('test.csv')
geos = [['Estados Unidos','US - Estados Unidos'],['Estonia','EE - Estonia']]

for old_val, new_val in geos:
    # 用loc定位所有匹配旧值的行,直接修改Country列
    df.loc[df['Country'] == old_val, 'Country'] = new_val

这种方式虽然能生效,但数据量大时效率不如方法1,不推荐优先使用。

方法3:apply自定义替换逻辑

如果你的映射规则更复杂(比如需要模糊匹配),可以用apply自定义函数处理:

import pandas as pd

df = pd.read_csv('test.csv')
geos = [['Estados Unidos','US - Estados Unidos'],['Estonia','EE - Estonia']]

def replace_country(country_name):
    for old_val, new_val in geos:
        if country_name == old_val:
            return new_val
    return country_name  # 没有匹配到就返回原值

df['Country'] = df['Country'].apply(replace_country)

这种方式灵活性高,但同样不如矢量化操作高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:23:41