你可能不知道的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翻译组
- Java面试系列21-xml
- tensorflow载入数据的三种方式 之 TF生成数据的方法
- JS游戏开发 可移动地图的实现
- Java面试系列-多线程
- pymongo.errors:Sort operation used more than the maximum 33554432 bytes of RAM. Add an index,
- PG学习初体验--源码安装和简单命令(r8笔记第97天)
- Pymongo: TypeError: if no direction is specified, key_or_list must be an instance of list
- Java面试系列19-Struts2
- JS游戏开发,让你的静态人物动起来(来自网路)
- Golang语言websocket源码
- 社团划分——Fast Unfolding算法
- 【PSU】AIX 11g RAC自动打GI PSU5
- 详解自动识别验证码,LSTM大显身手
- 智能算法——PageRank
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- tf.transpose函数解析
- 新版RTSP协议视频流媒体平台EasyNVR首页播放器遮挡下拉框的问题优化
- CentOS系统下RTSP协议拉流视频平台EasyNVR端口如何穿透防火墙?
- 高吞吐量消息系统—kafka
- 国人开源了一款小而全的 Java 工具类库,厉害啊!!
- tf.session.run()单函数运行和多函数运行区别
- 使用 Tensorflow 在 CIFAR-10 二进制数据集上构建 CNN
- Hold Time违例,该如何解决
- Tensorflow BN详解:4_使用tf.nn.batch_normalization实现BN
- Tensorflow BatchNormalization详解:3_使用tf.layers高级函数来构建带有BN的神经网络
- 【DB宝17】使用mysqldump+mysqlbinlog恢复误删除的数据库
- 13-3 vi编辑模式和移动光标
- Tensorflow BatchNormalization详解:2_使用tf.layers高级函数来构建神经网络
- 使用 numpy 切分训练集和测试集
- 反向学习,相对基学习 opposition-based learning 简介