首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >一种在Pandas中快速替换列中多个字符串值的方法

一种在Pandas中快速替换列中多个字符串值的方法
EN

Stack Overflow用户
提问于 2021-10-22 11:45:55
回答 2查看 46关注 0票数 1

我正在尝试替换列中的多个字符串值,并且我知道我可以使用replace()逐个完成。考虑到我需要替换10个以上的字符串值,我只是想知道是否有更快的方法将许多字符串值替换为相同的值。

代码语言:javascript
运行
复制
df = pd.DataFrame({'a':["US", "Japan", "UK", "China", "Peru", "Germany"]})
df.replace({'a' : { 'Japan' : 'Germany', 'UK' : 'Germany', 'China' : 'Germany' }})

预期输出:

代码语言:javascript
运行
复制
         a
0       US
1  Germany
2  Germany
3  Germany
4     Peru
5  Germany
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-10-22 11:51:29

Series.isin中使用numpy.where

代码语言:javascript
运行
复制
#60k rows
df = pd.DataFrame({'a':["US", "Japan", "UK", "China", "Peru", "Germany"] * 10000})

In [161]: %timeit df['a'] = df.a.map({ 'Japan' : 'Germany', 'UK' : 'Germany', 'China' : 'Germany' }).fillna(df.a)
12.4 ms ± 501 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

In [162]: %timeit df['a'] = np.where(df.a.isin(['Japan','UK','China']), 'Germany', df.a)
4.27 ms ± 379 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)   

#assignment raise error in test
In [1632]: %timeit df.replace({'a' : { 'Japan' : 'Germany', 'UK' : 'Germany', 'China' : 'Germany' }})
7.85 ms ± 462 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

Slowier解决方案:

代码语言:javascript
运行
复制
In [157]: %timeit df.replace('Japan|UK|China', 'Germany', regex=True)
218 ms ± 842 µs per loop (mean ± std. dev. of 7 runs, 1 loop each)
票数 4
EN

Stack Overflow用户

发布于 2021-10-22 11:52:48

使用:

代码语言:javascript
运行
复制
df = df.replace('Japan|UK|China', 'Germany', regex=True)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69676337

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档