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,我需要为数百万的数据集应用此代码.所以有人能告诉我如何减少执行时间吗?还有其他方法可以完成任务吗?
我发现预编译正则表达式的性能提高了约 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)