专栏首页小数志Pandas用了这么久,有觉得哪里不好的地方吗?

Pandas用了这么久,有觉得哪里不好的地方吗?

导读

作为一名数据分析师,自己对Pandas有过系统的学习和应用实践,对其大部分功能甚至骚操作也称得上有所研究,前期也写过太多的Pandas应用技巧相关的文章。那么在赞美之余,有没有一些觉得不好的设计呢?今天本文就来吐槽3个自己觉得Pandas设计有欠妥当的地方,纯为个人见解!

槽点1:函数API过于丰富,命名不够直观易懂;有时又缺少一些有用的API

Pandas为了提供丰富的API、方便使用者的灵活调用,在设计上提供了大量繁杂的小功能和小技巧,但其实过犹不及,有时提供了过多的API在提供了丰富性的同时也给使用者带来一定的困扰,致使容易遗忘甚至混淆部分API的功能。例如:

以Pandas核心数据结构DataFrame为例,其一大特色是支持行列索引,然而在索引相关操作时,包括的API有reset_index、set_index、reindex、reindex_like、rename、rename_axis等等,至少在自己初学时对这index相关的函数懵圈了好久。相比之下,同样是以DataFrame为核心数据抽象的Spark.sql组件,其API则尤为简洁易懂。当然了,Spark里的DataFrame没Pandas的复杂是客观事实,Pandas里丰富的API也确实有其独特用武之地,所以也不能完全算是槽点。

如果说Pandas的API足够丰富是其一大优势,但在有些情况下又不尽然。Pandas在判断元素取值是否为空值时提供了互补的四个API,分别是isna、isnull、notna、notnull,这确实也是符合其API丰富的特点;但在处理元素是否属于某集合的API时,按理说也应当提供互补的操作,例如isin和notin,然而实际情况却是只有isin,当然notin是可以简单的在isin前加元素取反来实现,所以Pandas的API设计原则到底是要精练还是方便!

槽点2:部分功能用法不尽统一

这里就举一个小例子,就是Pandas内置了一些可视化功能,具体来说是对于DataFrame而言可直接调用部分绘图接口实现快速简单可视化。例如对于一个DataFrame,直接调用plot函数,通过设置kind参数可实现11种常用图表的可视化输出(默认基于matplotlib):

通过df.plot接口可实现11种绘图类型

然而,熟悉Pandas可视化操作的一定知道还有一种方式是直接通过df调用相应绘图接口的简洁形式,例如df.hist等等。然而,不幸的是这种简介的调用方法只对个别图表有用,大部分是不支持的。例如scatter。但问题是两种调用方式有什么本质区别吗?为何第二种要少支持一些图表类型呢?

槽点3:函数的参数名风格混乱

程序员都知道良好的变量命名其意义有多么的重要,自己在编写一些小功能函数时对于函数名、参数名等也是绞尽脑汁,既要简洁又要直观易懂。但在Pandas的有些函数中,参数名其实是比较混乱的。例如在读取数据时最为常用的pd.read_csv函数,其提供了大量的个性化参数配置,所以在使用起来更为灵活多样。但其参数命名却实在不敢恭维:

例如,对于多个单词组成的参数名,按照python的惯例应该是用蛇形命名法吧,但为什么skipinitialspace=False, skiprows=None, skipfooter=0这些又不用?对于参数可能是列表或字典等集合类的,那么参数名应该用单词的复数形式吧,例如names、usecols这些,但为什么dtype和date_parser这些也可能是集合传参的又用的单数?终究还是感觉有失严谨!

当然,最后个人还是要声明立场,我一直都是一个Pandas爱好者,也一直享受着Pandas对数据处理带来的便利,所以这些吐槽可能还是出于希望其更好迭代改进的期盼吧!

本文分享自微信公众号 - 小数志(Datazhi),作者:luanhz

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-06-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 官方调研重磅发布,Pandas或将重构?

    为指引 Pandas 未来开发方向,Pandas 官方团队于 2019 年夏搞了一次调研,这次调研历时 15 天,共有 1250 条反馈数据。问卷数据保存在 d...

    double
  • Python 全栈 191 问(附答案)

    作为程序员,你的电脑里、书架上,一定少不了 Python 的资料和课程。免费的电子书,花钱买的课,实体书籍...

    double
  • 如何用 Python 和 BERT 做中文文本二元分类?

    因为我当时正在用 fast.ai 的 ULMfit 做自然语言分类任务(还专门写了《如何用 Python 和深度迁移学习做文本分类?》一文分享给你)。ULMfi...

    王树义
  • 如何用 Python 和 BERT 做中文文本二元分类?

    因为我当时正在用 fast.ai 的 ULMfit 做自然语言分类任务(还专门写了《如何用 Python 和深度迁移学习做文本分类?》一文分享给你)。ULMfi...

    崔庆才
  • Python新工具:用三行代码提取PDF表格数据

    PDF 文件是一种非常常用的文件格式,通常用于正式的电子版文件。它能够很好的将不同的排版格式固定下来,形成版面清晰且美观的展示效果。然而,对于想要从 PDF 中...

    1480
  • 8个流行的Python可视化工具包,你喜欢哪个?

    导读:喜欢用 Python 做项目的小伙伴不免会遇到这种情况:做图表时,用哪种好看又实用的可视化工具包呢?之前文章里出现过漂亮的图表时,也总有读者在后台留言问该...

    华章科技
  • 8个好看又实用 Python可视化工具包,再也不怕做不出图表了!

    用 Python 创建图形的方法有很多,但是哪种方法是最好的呢?当我们做可视化之前,要先明确一些关于图像目标的问题:你是想初步了解数据的分布情况?想展示时给人们...

    编程文青李狗蛋
  • Pandas0.25来了,别错过这10大好用的新功能

    这可是个新功能,能直接为指定的聚合输出列命名。先创建一个 DataFrame 示例。

    小小詹同学
  • 纳米白与Pandas

    温井很久没有来更新,感谢小伙伴幕黑君积极推送文章,希望大家喜欢。 温井消失的理由,说来很不好意思。 一是后来意识到上一篇中提到的后台留言的粉丝,其实是给幕黑君留...

    企鹅号小编
  • 热乎乎的阿里面经,攒人品

    一面: 1.自我介绍一下,然后问你最擅长哪一方面(我说虚拟机、集合) 2.他说HashMap我现在都不敢问了,出过很多笑话,很多人都是背的,自己没办法判断是看...

    牛客网
  • 再见,Matplotlib!

    可以看到,虽然结果差不多,不过代码量瞬间就上去了,如果你是Matplotlib高手可能会用更简洁的代码制作,但一定没有pandas一行代码来的方便!

    刘早起
  • 点开,看一段,你就会喜欢上学习pandas,你该这么学!No.3

    而梦想橡皮擦这位大佬,就在做这个事情 (说白了,就是高深的文章写不出来,还要装做大佬,心好累,好不容易找到这么一个借口,真开心)

    梦想橡皮擦
  • 快问快答 | 助教带你学习数据科学(附答疑视频领取)

    大数据文摘
  • 2019年Pandas官方用户调研

    是 90.67% 否 9.33% Name: Python 是您的主打语言吗?, dtype: object

    hankleo
  • Python的可视化库超全盘点,有你中意的一款吗?

    使用Python创建图形的方法有很多,但是哪种方法最好呢?当我们进行可视化时,问一些关于图形目标的问题是很重要的:您是否试图对数据的外观有一个初步的感觉?也许你...

    HuangWeiAI
  • Kaggle 大神Dan Becker与你分享他的数据科学之旅!

    “如果我下定决心要进入前1%,有可能在达成目标前我就放弃了。这是一个过于困难的目标,如果我心里总想着这件事,那我永远无法去完成它。”

    大数据文摘
  • 如果你不知道做什么,那就学一门杂学吧

    多年以后,面对人工智能研究员那混乱不堪的代码,我会想起第一次和S君相见的那个遥远的下午。那时的B公司,还是一个仅有6个人的小团队,Mac和显示器在桌上依次排开,...

    青南
  • 这里有8个流行的Python可视化工具包,你喜欢哪个?

    用 Python 创建图形的方法有很多,但是哪种方法是最好的呢?当我们做可视化之前,要先明确一些关于图像目标的问题:你是想初步了解数据的分布情况?想展示时给人们...

    CDA数据分析师
  • 这里有8个流行的Python可视化工具包,你喜欢哪个?

    用 Python 创建图形的方法有很多,但是哪种方法是最好的呢?当我们做可视化之前,要先明确一些关于图像目标的问题:你是想初步了解数据的分布情况?想展示时给人们...

    机器之心

扫码关注云+社区

领取腾讯云代金券