我正在尝试替换列中的多个字符串值,并且我知道我可以使用replace()
逐个完成。考虑到我需要替换10个以上的字符串值,我只是想知道是否有更快的方法将许多字符串值替换为相同的值。
df = pd.DataFrame({'a':["US", "Japan", "UK", "China", "Peru", "Germany"]})
df.replace({'a' : { 'Japan' : 'Germany', 'UK' : 'Germany', 'China' : 'Germany' }})
预期输出:
a
0 US
1 Germany
2 Germany
3 Germany
4 Peru
5 Germany
发布于 2021-10-22 11:51:29
在Series.isin
中使用numpy.where
#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解决方案:
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)
发布于 2021-10-22 11:52:48
使用:
df = df.replace('Japan|UK|China', 'Germany', regex=True)
https://stackoverflow.com/questions/69676337
复制相似问题