如何在工作中提高pandas运行速率?【超实用方法整理】

大家早上好,本人姓吴,如果觉得文章写得还行的话也可以叫我吴老师。欢迎大家跟我一起走进数据分析的世界,一起学习!
感兴趣的朋友可以关注我的数据分析专栏,里面有许多优质的文章跟大家分享哦。

大家都知道pandas计算功能非常厉害,运行速率也非常的快。通常情况下我们都不用去考虑怎么缩短运行的时间,因为往往一小会就运行完了。

但是,在现如今这个大数据的时代,特别是经常要与数据打交道的数据分析师 / 数据工程师,往往会处理到上百万甚至千万级别的数据,这个时候就不得不考虑以下如何使用恰当,或者说好用的方法来提升运行速率了。

那么今天,我给大家整理了工作学习中可以用到的几种提升pandas运行速率的思维或方法。

目前整理了最常见的四种情况,后续可能会不断更新,大家可以先收藏着。

我们很多时候用到pandas都是写好指定的条件,然后再对dataframe进行一系列运算,如:

df_power = df[(df.category == '功能饮料')]
print(df_power['sales].sum())

这里实现的就是求出category为功能饮料的销售额总和。

那么这样子写是ok的,完全没有问题,那如果是想要天猫平台的category为功能饮料的销售额总和呢?

df_tmall_power = df[(df.category == '功能饮料') & ((df.platform == '天猫'))]
print(df_tmall_power['sales].sum())

这样子写ok吗?
答案是ok的,哈哈。

但这里有个问题,如果说我们只需要用到天猫平台的数据,并且需要经常求天猫平台中各式各样的数据,那么我们就不能一直这么写,应该直接就先把 df换成 df_tmall,也就是这样:

df_tmall = df[((df.platform == '天猫'))]
df_tmall_power = df_tmall[(df_tmall.category == '功能饮料') & ((df_tmall.platform == '天猫'))]
print(df_tmall_power['sales].sum())

总之一句话,如果只是在些特定范围内做操作的话,并且要操作多次的,可以先把那个dataframe给它筛一筛,这样子运行速度会快很多很多。

  • 第一种
df_raw.loc[(df_raw.category == '果汁') & (df_raw.brand == '美汁源') & (df_raw.month == '2020-01-01'), ['values']] = 100
df_raw.loc[(df_raw.category == '果汁') & (df_raw.brand == '美汁源') & (df_raw.month == '2020-01-01'), ['units']] = 20
df_raw.loc[(df_raw.category == '果汁') & (df_raw.brand == '美汁源') & (df_raw.month == '2020-01-01'), ['price']] = 5
  • 第二种
df_raw.loc[(df_raw.category == '果汁') & (df_raw.brand == '美汁源') & (df_raw.month == '2020-01-01'), ['values', 'units', 'price']] = 100, 20, 5

第二种效率远高于第一种。

  • 第一种
df_plat = df[(df.platform == 'PDD') | (df.platform == 'Tmall') | (df.platform == 'JD')]
  • 第二种
df_plat = df[(df.platform.isin(['PDD', 'Tmall', 'JD']))]

第二种效率远高于第一种。

这点就比较基础了,有些刚上手pandas的朋友可能没意识到pandas是可以直接对多行数据,或者说全部数据进行修改的,并且以为需要向以往接触到的list、dict一样,进行for循环操作,这样子就真的太浪费pandas了,大材小用了属于是。

举个例子,现在有一个表格,其中一个字段名是grade,现在想要求出grade大于等于90的人数。

  • 第一种(for循环)
list_grade = df['grade'].tolist()
count = 0
for i in list_grade:
    if i >= 90:
        count += 1
print(count)
  • 第二种(矢量化操作)
print(df[df.grade >= 90].shape[0])

比较之后我们不难发现,使用矢量化操作不仅运行速率会更快,而且代码也简洁了许多。

注:如果真的不得不用到for循环,请使用.iterrows()或.itertuples()来提高速度和语法。

看完这篇,还有更多知识点分享给你哦,自己慢慢找哈,就在下面链接。

推荐关注的专栏

往期内容回顾

关注我,了解更多相关知识!

Original: https://blog.csdn.net/qq_44186838/article/details/122716310
Author: 报告,今天也有好好学习
Title: 如何在工作中提高pandas运行速率?【超实用方法整理】

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/741552/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球