python - 如果字符串以某个字符开头,则替换它
问题描述
我正在尝试使用 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 中字符串的最后一个字符,但我知道第一个字符。任何帮助,将不胜感激。
解决方案
相反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
推荐阅读
- ansible - 使用 ansible 从多个 citrix 虚拟机管理程序 vm 中获取 ip 地址列表
- c# - 任何人都可以阐明这个 System.Random 算法吗?
- json - 将 Google json 地图标记限制为可查看的地图
- bash - while 循环在附加文件 bash 中中断到早期
- python - 将对象设置为 None 不会更新所有引用
- tensorflow - TensorFlow 概率采样需要很长时间
- python - 未正确旋转图像
- ruby-on-rails - 如何处理 URL 中以“x”模式开头的 Rails 重定向
- ios - UITableviewcell 内的 UITextField。可编辑但键盘未显示
- java - 得到错误方法排序(列表
) 类型中的 Collections 不适用于参数 (List )