我有一个超过1,5百万行DataFrame的df来清理带有正则表达式的数据。那真的很慢。我该如何加快速度?
我做这种事情:
splitters = str.maketrans(' ,()/-', '......')
n=0
for i in lev1['listing_price']:
n+=1
listing_price = i.replace('£', '').replace('\n', '').translate(
splitters).split('.')
pw_pcm_list = []
price_list = []
for c in listing_price:
pw_pcm = re.sub('\d', '', c)
pw_pcm_list.append(pw_pcm)
price = re.sub('[a-zA-Z]', '', c)
price_list.append(price)
price_list = list(filter(lambda a: a != '', price_list))
price_list = [int(p) for p in price_list]
price_list = [np.mean(price_list)]
pw_pcm_list = list(filter(lambda a: a != '', pw_pcm_list))
list_ = price_list + pw_pcm_list
if list_[1] == 'pw':
price_pcm = int(list_[0] / 7 * 30)
else:
price_pcm = list_[0]
lev1.loc[i, 'listing_price'] = price_pcm
print(n)
这就是系列的样子(左)和所需的输出(右)
£110pw 471.42
£320pcm 320
£400 pcm 400
£400 pcm 400
£320pcm 320
£110pw 471.42
答案 0 :(得分:0)
我设法通过仅将for循环应用于唯一值然后使用map
函数来加快处理速度。
new_value_dict = {}
for i in df['column'].unique():
#some data manipulations
new_value = ....
new_value_dict.update ({i:new_value})
df['column']=df['column'].map({i: new_value_dict})
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.unique.html