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

Pandas如何替换以特定字符开头的字符串?map返回全NaN如何解决

你代码运行返回全NaN的核心原因是对Series.map()的传参逻辑使用错误:当传入字典作为map的参数时,Pandas会将Series的每个元素值与字典的键做等值匹配,你将lambda函数作为字典的键,字符串元素不可能和函数对象匹配成功,因此所有结果都为NaN。


解决方案1:直接传入匹配函数

map支持直接传入自定义函数处理每个元素,写法如下:

import numpy as np
import pandas as pd

s = pd.Series(['cat', 'dog', np.nan, 'rabbit'])

def match_prefix(x):
    # 先处理空值避免调用startswith报错
    if pd.isna(x):
        return np.nan
    if x.startswith('c'):
        return 'kitten'
    elif x.startswith('d'):
        return 'puppy'
    elif x.startswith('r'):
        return 'bunny'
    # 未匹配到也返回空值
    return np.nan

result = s.map(match_prefix)
print(result)

运行后输出和你期望的结果完全一致:

0    kitten
1     puppy
2       NaN
3     bunny
dtype: object

解决方案2:规则可扩展写法

如果后续要新增匹配规则,可将前缀和对应值存入字典,避免写大量if-elif:

prefix_map = {
    'c': 'kitten',
    'd': 'puppy',
    'r': 'bunny'
}

def match_prefix(x):
    if pd.isna(x):
        return np.nan
    for prefix, target in prefix_map.items():
        if x.startswith(prefix):
            return target
    return np.nan

result = s.map(match_prefix)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 14:48:05