在大型数据集的pandas数据框中搜索和替换

Shy*_*ree 6 python regex pandas

我有一个大小为100万的数据集并输入数据框.

Id      description
 1      bc single phase acr
 2      conditioning accum
 3      dsply value ac
和字典大小2927,如下所示:

Key     Value
accum   accumulator
bb      baseboard
dsply   display

执行以下代码以使用其值替换dataframe中找到的字典键

dataset=dataset.replace(dict, regex=True)
Run Code Online (Sandbox Code Playgroud)

但它会耗费更多的时间来实现,即2000.0数据集的104.07914903743769秒,并且需要8GB RAM,我需要为数百万的数据集应用此代码.所以有人能告诉我如何减少执行时间吗?还有其他方法可以完成任务吗?

jpp*_*jpp 1

我发现预编译正则表达式的性能提高了约 15%。

但为了获得最佳性能,请参阅@unutbu 的优秀解决方案

import pandas as pd
import re

rep_dict = {'accum': 'accumulator', 'bb': 'baseboard', 'dsply': 'display'}
pattern = re.compile("|".join([re.escape(k) for k in rep_dict.keys()]), re.M)

def multiple_replace(string):    
    return pattern.sub(lambda x: rep_dict[x.group(0)], string)

df = pd.DataFrame({'description': ['bc single phase acr', 'conditioning accum', 'dsply value ac']})
df = pd.concat([df]*10000)

%timeit df['description'].map(multiple_replace)          # 72.8 ms per loop
%timeit df['description'].replace(rep_dict, regex=True)  # 88.6 ms per loop
Run Code Online (Sandbox Code Playgroud)