在清理数据时加快对熊猫的遍历

时间:2019-02-27 16:37:17

标签: pandas

我有一个超过1,5百万行DataFrame的df来清理带有正则表达式的数据。那真的很慢。我该如何加快速度?

  • 看来这个房子df中只有大约2000个唯一行,但是如何仅对唯一值进行迭代,然后将结果应用于df?也许是groupby?还是将列另存为类别并遍历类别?

我做这种事情:

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

1 个答案:

答案 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

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.map.html?highlight=map#pandas.Series.map