Pandas实现常用SQL操作
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Pandas实现常用SQL操作相关的知识,希望对你有一定的参考价值。
参考技术A 本文是写给有 SQL 基础,而对于 pandas 的 API 不够熟悉的同学的。将各种常见的 SQL 操作“翻译”成 pandas 的形式,从而便于数据处理。首先建立两个表,年龄国籍表和性别表,两者可以通过 name 字段进行关联。
t1 数据如下:
t2 数据如下:
用 SQL 来实现是:
而在 pandas 中,join 被称为 merge。其中 on 表示两个表用于关联的键。how 表示 join 的方式,支持 ‘left’, ‘right’, ‘outer’, ‘inner’ 四个选项,分别对应 SQL 的 left join、right join、outer join、inner join。
能匹配到 name 的就会补充上 gender,Kim 在性别表差不到数据,因此填充来一个 NaN 表示空值。
遇到两个表需要关联的字段不同名,在 SQL 中只需要修改 on 后面的条件即可。
假如把 t1 的 name 换一个名字,那么就不能直接用 on='name' 来进行关联了。先使用 rename 方法更改列名,然后再次左联。
输出:
新增一个年龄表:
表内容:
如果不对 age 两个同名字段进行处理,pandas 会自动添加后缀,一个是 _x,另一个是 _y:
如果想要自定义后缀,那么可以:
于是上表的 age_x 和 age_y 就变成 age_left 和 age_right 了。
pandas 的 join 和 SQL 的 join 不太一样。默认行为是直接根据 index 进行关联。你可以理解为直接把两个表左右拼接在一起。
可以看到是直接根据 index 序号进行左右拼接。
如果存在名字相同的列则需要指明后缀,否则会报 ValueError。
将两个表上下拼接起来的操作。
结果如下:
注意,该操作不会做任何去重,只是单纯的拼接而已。
例如要求男性和女性两组的平均年龄。先关联 t1 和 t2 然后 group by 即可:
如果用 SQL 实现:
同时查看最小值和最大值:
其中 ['age'] 表示只输出 age 字段。agg 表示聚合,对于内置函数需要用引号,这里分别计算两个组的最小值和最大值。
SQL版本:
这里是体现 Python 比 SQL 强大的地方了。你可以写自定义的聚合函数。比如我要计算每组的奇数个数。注意,由于是聚合函数,因此传入的参数是 Series 对象,即一列数据,因此要用对应的方法。用数学语言来说,这里处理的是向量,而不是标量。
s % 2 是对输入的向量的每一个元素进行除2求余数,然后用内置聚合函数 sum 加总,由于奇数的余数是1,而偶数的余数是0,因此这个求和数就是奇数的个数。传参到 agg 方法只需要把 is_odd 函数放入列表即可,由于不是内置函数,因此不需要加引号。
暂时写到这里,后面如果用到其他地方再继续补充。
Python pandas.read_sql_query()常用操作方法代码
本文主要介绍使用pandas.read_sql_query()一些常用操作示例demo代码。
以上是关于Pandas实现常用SQL操作的主要内容,如果未能解决你的问题,请参考以下文章