首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在清理数据的同时加快对熊猫的迭代

在清理数据的同时加快对熊猫的迭代
EN

Stack Overflow用户
提问于 2019-02-27 16:37:16
回答 1查看 455关注 0票数 1

我有一个超过1,500万行的df,DataFrame可以用正则表达式清理数据。太慢了..。我怎样才能加快速度?

  • 看起来,我在这个房子中只有大约2000行唯一的行,但是如何只迭代唯一值,然后将结果应用到df中呢?也许是集体?还是将列保存为分类并对类别进行迭代?

我做了这样的事:

代码语言:javascript
复制
    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)

这就是系列的外观(左)和期望的输出(右)。

代码语言:javascript
复制
£110pw   471.42
£320pcm  320 
£400 pcm 400
£400 pcm 400
£320pcm  320
£110pw   471.42
EN

回答 1

Stack Overflow用户

发布于 2019-02-27 18:42:43

我只将for循环应用于唯一值,然后使用map函数,从而加快了速度。

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54910290

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档