map
可以比快得多
replace
如果你的字典有两个以上的键,使用
地图
可以比快得多
代替
. 此方法有两种版本,具体取决于词典是否详尽地映射了所有可能的值(以及是否希望不匹配项保留其值或转换为nans):
穷举映射
在这种情况下,形式非常简单:
df['col1'].map(di) # note: if the dictionary does not exhaustively map all
# entries then non-matched entries are changed to NaNs
虽然
地图
最常用的函数是它的参数,它可以替代地使用字典或系列:
Documentation for Pandas.series.map
非穷举映射
如果有非穷尽映射,并且希望保留非匹配的现有变量,则可以添加
fillna
:
df['col1'].map(di).fillna(df['col1'])
正如@jpp在这里的回答:
Replace values in a pandas series via dictionary efficiently
基准点
在Pandas 0.23.1版中使用以下数据:
di = {1: "A", 2: "B", 3: "C", 4: "D", 5: "E", 6: "F", 7: "G", 8: "H" }
df = pd.DataFrame({ 'col1': np.random.choice( range(1,9), 100000 ) })
和测试
%timeit
,看起来
地图
大约比
代替
.
注意你的加速
地图
会因你的数据而有所不同。最大的加速似乎是大词典和详尽的替代品。更多的基准测试和讨论请参见@jpp answer(链接在上面)。