如何在Pandas中实现类似于SQL查询的数据操作?
SQL 的神奇之处在于其易于学习,而它之所以如此容易学习的原因主要是代码语法非常直观。

但是,与SQL相比,Pandas 就不那么直观了,尤其是在我们先用的是SQL,再转向 Pandas 时,这种感觉尤为强烈。
那么,我们是不是应该思考在 SQL 中进行的数据操作,能不能在 Pandas 实现?
基于以上目标,本文可以作为一个在Pandas中编写SQL查询的指南。
目录
选择行
组合表格
筛选表
排序值
聚合函数
1. 选择行
SELECT IT之家 FROM
如果要选择整个表,只需调用表的名称:
# SQL
SELECT IT之家 FROM table_df
# Pandas
table_df
SELECT a, b FROM
如果要从表中选择特定列,请在双括号中列出要的列:
# SQL
SELECT column_a, column_b FROM table_df
# Pandas
table_df[['column_a', 'column_b']]
SELECT DISTINCT
只需使用 .drop\u duplicates()即可获得不同的值:
# SQL
SELECT DISTINCT column_a FROM table_df
# Pandas
table_df['column_a'].drop_duplicates()
SELECT a as b
如果要重命名列,请使用 .rename():
# SQL
SELECT column_a as Apple, column_b as Banana FROM table_df
# Pandas
table_df[['column_a', 'column_b']].rename(columns={'column_a':
'Apple', 'column_b':'Banana'})
SELECT CASE WHEN
对于"SELECT CASE WHEN"的等效项,可以使用 np.select(), 其中首先指定每个选项的选择和值。
# SQL
SELECT CASE WHEN column_a > 30 THEN "Large"
WHEN column_a <= 30 THEN "Small"
END AS Size
FROM table_df
# Pandas
conditions = [table_df['column_a']>30, table_df['column_b']<=30]
choices = ['Large', 'Small']
table_df['Size'] = np.select(conditions, choices)
2. 组合表格
INNER/LEFT/RIGHT JOIN
只需使用 .merge()来连接表,就可以使用“how”参数指定它是 LEFT、RIGHT、 INNER 或者 OUTER联接。
# SQL
SELECT IT之家 FROM table_1 t1
LEFT JOIN table_2 t1 on t1.lkey = t2.rkey
# Pandas
table_1.merge(table_2, left_on='lkey', right_on='rkey', how='left')
UNION ALL
只需使用 pd.concat():
# SQL
SELECT IT之家 FROM table_1
UNION ALL
SELECT IT之家 FROM table_2
# Pandas
final_table = pd.concat([table_1, table_2])
3. 筛选表
SELECT WHERE
在筛选数据帧时,与在 SQL 中使用 WHERE 子句的方式相同时,只需在方括号中定义条件:
# SQL
SELECT IT之家 FROM table_df WHERE column_a = 1
# Pandas
table_df[table_df['column_a'] == 1]
SELECT column_a WHERE column_b
如果要从表中选择某个列并筛选其他列,请按照以下格式操作:
# SQL
SELECT column_a FROM table_df WHERE column_b = 1
# Pandas
table_df[table_df['column_b']==1]['column_a']
SELECT WHERE AND
如果要按多个条件进行筛选,只需将每个条件换在括号中,并使用"&"分隔每个条件。
# SQL
SELECT IT之家 FROM table_df WHERE column_a = 1 AND column_b = 2
# Pandas
table_df[(table_df['column_a']==1) & (table_df['column_b']==2)]
SELECT WHERE LIKE
SQL 中的 LIKE 等效项是 .str.contains()。如果要应用大小写不敏感,只需在参数中添加 case=False。
# SQL
SELECT IT之家 FROM table_df WHERE column_a LIKE '%ball%'
# Pandas
table_df[table_df['column_a'].str.contains('ball')]
SELECT WHERE column IN()
SQL 中 IN() 的等效项为 .isin()。
# SQL
SELECT IT之家 FROM table_df WHERE column_a IN('Canada', 'USA')
# Pandas
table_df[table_df['column_a'].isin(['Canada', 'USA'])]
4.排序值
ORDER BY one column
在SQL中,ORDER BY 的等同于 .sort_values()。使用 'ascending' 参数指定是按升序还是降序对值排序,默认值与 SQL 一样升序。
# SQL
SELECT IT之家 FROM table_df ORDER BY column_a DESC
# Pandas
table_df.sort_values('column_a', ascending=False)
ORDER BY multiple columns
如果要按多个列排序,可以列出括号中的列,并在括号中的 “ascending” 参数中指定排序方向。请确保遵循列出的列的相应顺序。
# SQL
SELECT IT之家 FROM table_df ORDER BY column_a DESC, column_b ASC
# Pandas
table_df.sort_values(['column_a', 'column_b'], ascending=[False, True])
5.聚合函数
COUNT DISTINCT
聚合函数有一个通用模式。
要复制 COUNT DISTINCT,只需使用 .groupby()和.nunique()。
# SQL
SELECT column_a, COUNT DISTINCT(ID)
FROM table_df
GROUP BY column_a
# Pandas
table_df.groupby('column_a')['ID'].nunique()
SUM
# SQL
SELECT column_a, SUM(revenue)
FROM table_df
GROUP BY column_a
# Pandas
table_df.groupby(['column_a', 'revenue']).sum()
AVG
# SQL
SELECT column_a, AVG(revenue)
FROM table_df
GROUP BY column_a
# Pandas
table_df.groupby('column_a')['revenue'].mean()
总结
Pandas无疑是一个强大的Python数据分析库,但是它也不是无所不能,对于某些操作并不具体和方便。
以上的操作可以帮助大家更好地在Pandas中实现一些SQL查询的实用操作,大家赶紧玩起来~
相关热词:
本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供用于网络技术学习参考,学习中请遵循相关法律法规!
本文地址: https://www.juheyunku.com/sql/mssql/8464.shtml
相关文章
热门TAG
命令 权重 外链 企业网站 白帽 php 织梦教程 dedecms修改内容 javascript 织梦 功能 标签 调用 详解 服务器 网站流量 实例解析 Dedecms 织梦cms HTML tags标签 python jquery教程 jquery windows SEO优化 蜘蛛 搜索引擎 网站收录 JSP最新文章
-
sql server 关于设置null的一
时间:2020-12-28
-
详解SQL游标的用法
时间:2020-12-27
-
vs code连接sql server数据库步
时间:2020-12-27
-
图书管理系统的sqlserver数
时间:2020-12-25
-
详解SQL 通配符
时间:2020-12-25
-
sql四大排名函数之ROW_NUM
时间:2020-12-25
-
SQLServer数据库处于恢复挂
时间:2020-12-24
-
Win10 64位安装个人版SQL20
时间:2020-12-24
热门文章
-
sqlserver中查询横表变竖表的sql语句简析
时间:2020-12-08
-
关于SQL Server查询语句的使用
时间:2020-12-13
-
SQL Server简单模式下误删除堆表记录恢复方
时间:2020-12-12
-
MSSQL教程_mssql数据库教程_MSSQL基础教程_第
时间:2020-12-13
-
详解SQL游标的用法
时间:2020-12-27
-
sql server 关于设置null的一些建议
时间:2020-12-28
-
jdbc连接sql server数据库问题分析
时间:2020-12-10
-
mssql关于一个表格结构的另外一种显示(表
时间:2020-12-11
-
SQL Server数据库入门学习总结
时间:2020-12-10
-
使用SqlBulkCopy时应注意Sqlserver表中使用缺
时间:2020-12-09
