首页 > 解决方案 > 如果字符串以某个字符开头,则替换它

问题描述

我正在尝试使用 Pandasmap为键分配值,如果 DataFrame 中的条目以某个字符开头,则键将是返回的字符串。

使用 Pandas 文档中的示例,使用以下 DataFrame 和我的代码:

import numpy as np
import pandas as pd

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

s.map({ lambda x: x if x.startswith('c') else None: 'kitten', 
        lambda x: x if x.startswith('d') else None: 'puppy',
        lambda x: x if x.startswith('r') else None: 'bunny',
    })

预期结果:

0    kitten
1     puppy
2       NaN
3     bunny
dtype: object

目前,我的代码返回 4 个NaN值。我之所以指定startswith,是因为我并不总是能够知道 DataFrame 中字符串的最后一个字符,但我知道第一个字符。任何帮助,将不胜感激。

标签: pythonpandasstringdictionary

解决方案


相反lambda,可以通过索引创建字典和映射第一个字母str[0]

print (s.str[0].map({'c': 'kitten', 'd': 'puppy', 'r': 'bunny'}))
0    kitten
1     puppy
2       NaN
3     bunny
dtype: object

如果测试子串的字符串长度不同,则长度不一定相同:

d = {'ca': 'kitten', 'd': 'puppy', 'rab': 'bunny'}

for k, v in d.items():
    s.loc[s.str.startswith(k, na=False)] = v
print (s)
0    kitten
1     puppy
2       NaN
3     bunny
dtype: object

推荐阅读