如何通过字典d
替换Pandas series s
中的值已被多次询问和重新询问.
建议的方法(1、2、3、4)是使用s.replace(d)
,或者如果在字典键中找到了所有序列值,则偶尔使用s.map(d)
.
然而,使用s.replace
的性能通常非常慢,通常比简单的列表理解慢5-10倍.
另外,s.map(d)
具有良好的性能,但只有在字典中找到所有键时才推荐使用.
为什么s.replace
这么慢?如何提高性能?
import pandas as pd, numpy as np
df = pd.DataFrame({'A': np.random.randint(0, 1000, 1000000)})
lst = df['A'].values.tolist()
##### TEST 1 #####
d = {i: i+1 for i in range(1000)}
%timeit df['A'].replace(d) # 1.98s
%timeit [d[i] for i in lst] # 134ms
##### TEST 2 #####
d = {i: i+1 for i in range(10)}
%timeit df['A'].replace(d) # 20.1ms
%timeit [d.get(i, i) for i in lst] # 243ms
Note:这个问题没有被标记为重复,因为它正在寻找针对不同数据集的when to use种不同方法的具体建议.这在回答中是明确的,这是其他问题中通常不涉及的一个方面.