专栏首页DeepHub IMBA你可能不知道的pandas的5个基本技巧

你可能不知道的pandas的5个基本技巧

between 函数

多年来我一直在SQL中使用“between”函数,但直到最近才在pandas中发现它。

假设我们有一个带有价格的DataFrame,我们想要过滤2到4之间的价格。

 df = pd.DataFrame({'price': [1.99, 3, 5, 0.5, 3.5, 5.5, 3.9]})

使用between功能,您可以减少此过滤器:

 df[(df.price >= 2) & (df.price <= 4)]

使用between

 df[df.price.between(2, 4)]

它看起来可能不多,但是当编写许多过滤器时,这些括号很烦人。带有between函数的过滤器也更具可读性。

函数集合都是有等号的:左<=series<=右

用reindex函数修正行顺序

重索引函数为一个序列或一个数据文件生成一个新索引。在生成具有预定义顺序的列的报告时,我使用reindex函数。

让我们把t恤的尺寸添加到我们的数据库里。分析的目的是计算每种尺寸的平均价格:

 df = pd.DataFrame({'price': [1.99, 3, 5], 'size': ['medium', 'large', 'small']})df_avg = 
 df.groupby('size').price.mean()
 df_avg

在上表中,大小的顺序是随机的。应该订小杯、中杯、大杯。由于大小是字符串,我们不能使用sort_values函数。这里有一个重新索引函数:

 df_avg.reindex(['small', 'medium', 'large'])

通过在reindex函数中指定大小的顺序,使得结果更容易解释。

Describe函数

描述函数是进行探索性数据分析时必不可少的工具。它显示了DataFrame中所有列的基本汇总统计信息。

 df.price.describe()

如果我们想计算10个分位数而不是3个呢?

 df.price.describe(percentiles=np.arange(0, 1, 0.1))

描述函数接受百分比参数。我们可以使用NumPy的arange函数指定百分比数,以避免手工输入每个百分比。

当与group by功能结合时,这个功能变得非常有用:

 df.groupby('size').describe(percentiles=np.arange(0, 1, 0.1))

使用正则表达式进行文本搜索

我们的t恤数据集有3种尺寸。假设我们想要过滤小的和中号的。一种繁琐的过滤方式是:

 df[(df['size'] == 'small') | (df['size'] == 'medium')]

这很糟糕,因为我们通常将其与其他过滤器结合在一起,这使得表达式不可读。有更好的方法吗?

pandas字符串列有一个“str”访问器,它实现了许多简化字符串操作的函数。其中之一是“contains”函数,它支持使用正则表达式进行搜索。

 df[df['size'].str.contains('small|medium')]

带有“contains”函数的过滤器可读性更强,更容易扩展和与其他过滤器组合。

大内存数据集

pandas甚至不能读取比主内存数据集更大的数据。它抛出MemoryError或内核崩溃。但是要处理一个大数据集,你不需要Dask或Vaex这样的包,只需要一些小技巧。

 iter_csv = pd.read_csv('dataset.csv', iterator=True, chunksize=1000)
 df = pd.concat([chunk[chunk['field'] > constant] for chunk in iter_csv])

分块读取数据集比一次全部读取要慢。我建议只在大于内存数据集的情况下使用这种方法。

在这种情况下,你不需要所有的列,你可以指定需要的列“usecols”参数时,读取数据集:

 df = pd.read_csv('file.csv', usecols=['col1', 'col2'])

这两种方法的好处是可以将它们组合在一起。

作者:Roman Orac

deephub翻译组

本文分享自微信公众号 - DeepHub IMBA(deephub-imba),作者:P**nHub兄弟网站

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

原始发表时间:2020-08-27

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 快速介绍Python数据分析库pandas的基础知识和代码示例

    “软件工程师阅读教科书作为参考时不会记住所有的东西,但是要知道如何快速查找重·要的知识点。”

    deephub
  • 机器学习中处理缺失值的9种方法

    数据集中缺少值的原因有很多。例如,在数据集的身高和年龄,会有更多年龄列中缺失值,因为女孩通常隐藏他们的年龄相同的如果我们准备工资的数据和经验,我们将有更多的薪水...

    deephub
  • keras搭建基于自动编码器的异常检测技术进行欺诈识别

    我最近阅读了一篇名为《使用自动编码器进行异常检测》的文章,在该文中对所生成的数据进行了实验,并且我认为将使用自动编码器进行异常检测这一想法应用于真实世界当中的欺...

    deephub
  • 房价数据转换和清洗

    下载链接:https://pan.baidu.com/s/16D5hw-XBEQnwtsf4fDJ8xw 密码:e1fg

    潇洒坤
  • 股票实时流计算

    var element = $('#61901593-c697-4e0e-ad17-c8f2c3fae6ae'); {"model_id": "8629...

    spark
  • 在郑州,你该买哪里的房子?

    某次和领导吃饭,无意中提到了房子的话题,说了几句自己的心得经验(虽然没有再次实操的资本),却给领导留下了深深的印象(领导,你不是又要在郑州置业了吧)。

    数据社
  • 使用pandas筛选出指定列值所对应的行

    该方法其实就是找出每一行中符合条件的真值(true value),如找出列A中所有值等于foo

    星星在线
  • Python 数据分析初阶

    这里可以单独查看其中的内容 data['nick'],计算其中的大小则使用 data['nick'].value_counts()。

    zucchiniy
  • 基于机器学习算法的时间序列价格异常检测(附代码)

    异常检测也称为异常值检测,是一种数据挖掘过程,用于确定数据集中发现的异常类型并确定其出现的详细信息。 在当今世界,由于大量数据无法手动标记异常值,自动异常检测显...

    量化投资与机器学习微信公众号
  • Python中字段抽取、字段拆分、记录抽取

    1、字段抽取 字段抽取是根据已知列数据的开始和结束位置,抽取出新的列 字段截取函数:slice(start,stop) 注意:和数据结构的访问方式一样,开始位置...

    Erin

扫码关注云+社区

领取腾讯云代金券