我们知道,使用 sql 语句能够完成对 table 的增删改查操作,pandas 同样也可以实现 sql 语句的基本功能。本节主要讲解 pandas 如何执行 sql 操作。
首先加载一个某连锁咖啡厅地址分布的数据集,通过该数据集对本节内容进行讲解。
import pandas as pd df = pd.read_excel("c:\\users\\qwy\\desktop\\data\\empdata.xlsx") print(df)
输出结果如下:
empno ename job mgr hiredate sal comm deptno
0 7369 smith clerk 7902.0 1980-12-17 800 nan 20
1 7499 allen salesman 7698.0 1981-02-20 1600 300.0 30
2 7521 ward salesman 7698.0 1981-02-22 1250 500.0 30
3 7566 jones manager 7839.0 1981-04-02 2975 nan 20
4 7654 martin salesman 7698.0 1981-09-28 1250 1400.0 30
5 7698 blake manager 7839.0 1981-05-01 2850 nan 30
6 7782 clark manager 7839.0 1981-06-09 2450 nan 10
7 7788 scott analyst 7566.0 1987-04-19 3000 nan 20
8 7839 king president nan 1981-11-17 5000 nan 10
9 7844 turner salesman 7698.0 1981-09-08 1500 0.0 30
10 7876 adams clerk 7788.0 1987-05-23 1100 nan 20
11 7900 james clerk 7698.0 1981-12-03 950 nan 30
12 7902 ford analyst 7566.0 1981-12-03 3000 nan 20
13 7934 miller clerk 7782.0 1982-01-23 1300 nan 10
select
在 sql 中,select 查询语句使用,
把要查询的每个字段分开,当然您也可以使用*
来选择所有的字段。如下所示:
select empno,ename,job,mgr,hiredate,sal,comm,deptno from emp limit 5;
对于 pandas 而言,要完成 select 查询,需要把数据集每一列(columns)的名称传递给 dataframe 对象。如下所示:
df[['empno','ename','job','mgr','hiredate','sal','comm' , 'deptno']].head(5)
下面代码是 pandas 执行 select 查询的完整程序:
import pandas as pd df = pd.read_excel("c:\\users\\qwy\\desktop\\data\\empdata.xlsx") emp = df[['empno','ename','job','mgr','hiredate','sal','comm' , 'deptno']].head(5) print(emp)
输出结果如下:
empno ename job mgr hiredate sal comm deptno
0 7369 smith clerk 7902.0 1980-12-17 800 nan 20
1 7499 allen salesman 7698.0 1981-02-20 1600 300.0 30
2 7521 ward salesman 7698.0 1981-02-22 1250 500.0 30
3 7566 jones manager 7839.0 1981-04-02 2975 nan 20
4 7654 martin salesman 7698.0 1981-09-28 1250 1400.0 30
假如您传入的是一个空列表, 那最终结果将输出所有的行索引标签。
where
sql 中的条件查询是通过 where 子句完成的。格式如下所示:
select * from emp where deptno = '30';
然而 dataframe 可以通过多种方式实现条件筛选,最直观的方法是通过布尔索引:
df[df['deptno'] == 30]
完整程序如下:
import pandas as pd df = pd.read_excel("c:\\users\\qwy\\desktop\\data\\empdata.xlsx") emp = df[df['deptno'] == 30] print(emp)
输出结果如下:
empno ename job mgr hiredate sal comm deptno
1 7499 allen salesman 7698.0 1981-02-20 1600 300.0 30
2 7521 ward salesman 7698.0 1981-02-22 1250 500.0 30
4 7654 martin salesman 7698.0 1981-09-28 1250 1400.0 30
5 7698 blake manager 7839.0 1981-05-01 2850 nan 30
9 7844 turner salesman 7698.0 1981-09-08 1500 0.0 30
11 7900 james clerk 7698.0 1981-12-03 950 nan 30
上面的语句通过布尔运算将 true 或 false 对象传递给 dataframe 对象,然后返回所有为 true 的行。
groupby
在 sql 语句中,通过 groupby 操作可以获取 table 中一组记录的计数。示例如下:
select id, count(*) from emp group by deptno;
而 pandas 可通过以下代码实现:
df.groupby('deptno').size()
完整的程序如下所示:
import pandas as pd import numpy as np df = pd.read_excel("c:\\users\\qwy\\desktop\\data\\empdata.xlsx") emp_count = df.groupby('deptno').size() # 或者使用agg或aggregate函数 # emp_count = df.groupby('deptno').aggregate({'empno':np.size,'sal':np.mean}) print(emp_count)
输出结果:
deptno
10 3
20 5
30 6
dtype: int64
limit
在 sql 中,limit 语句主要起到限制作用,比如查询前 n 行记录:
select * from emp limit n;
而在 pandas 中,您可以通过 head() 来实现(默认前 5 行),示例如下:
import pandas as pd df = pd.read_excel("c:\\users\\qwy\\desktop\\data\\empdata.xlsx") emp = df[['empno','ename','job','mgr','hiredate','sal','comm' , 'deptno']].head(5) print(emp)
输出结果:
empno ename job mgr hiredate sal comm deptno
0 7369 smith clerk 7902.0 1980-12-17 800 nan 20
1 7499 allen salesman 7698.0 1981-02-20 1600 300.0 30
2 7521 ward salesman 7698.0 1981-02-22 1250 500.0 30
3 7566 jones manager 7839.0 1981-04-02 2975 nan 20
4 7654 martin salesman 7698.0 1981-09-28 1250 1400.0 30
到此这篇关于pandas执行sql操作的实现的文章就介绍到这了,更多相关pandas执行sql操作内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论