我有一个大小为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)
但它会耗费更多的时间来表示,即2000年数据集的104.07914903743769秒,并且有8GB内存 我需要为数百万的数据集应用此代码。所以有人能告诉我如何减少执行时间吗?还有其他方法可以完成任务吗?
答案 0 :(得分:1)
我看到预编译正则表达式提高了约15%。
但为了获得最佳效果,请参阅@unutbu's excellent solution。
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
答案 1 :(得分:0)
任务可以轻松拆分,因为您的操作对于每一行都是独立的。多线程甚至可以在几台计算机上计算速度(这是MapReduce范例中的经典映射操作)。内存消耗也是如此:你可以加载不是完整的数据集,但是部分加载替换,保存结果并继续下去。