MySQL 如何使用Pandas SQL查询风格选择数据子集?
如果您习惯使用SQL来查询数据,那么您可能会对Pandas这个Python数据分析库视而不见。但是Pandas可以实现与SQL相同的功能,包括使用类似SQL的查询语言来筛选数据子集。下面我们将通过例子来了解如何使用Pandas的SQL查询风格选择数据子集。
阅读更多:MySQL 教程
环境准备
在开始之前,您需要先安装Python和Pandas。如果您还未安装这些,可以前往官方网站下载和安装。另外,为了方便演示,我们还使用了NumPy和Matplotlib这些其他的Python库,同样需要先安装。
安装好了所有的依赖库,下面我们来准备一份用于演示的数据集。
import pandas as pd
data = {'name': ['Alice', 'Bob', 'Charlie', 'David', 'Emily'],
'age': [25, 32, 18, 47, 23],
'gender': ['F', 'M', 'F', 'M', 'F'],
'income': [50000, 76000, 35000, 98000, 22000],
'city': ['New York', 'San Francisco', 'Chicago', 'Los Angeles', 'Boston']}
df = pd.DataFrame(data)
df
输出结果如下所示:
name | age | gender | income | city |
---|---|---|---|---|
Alice | 25 | F | 50000 | New York |
Bob | 32 | M | 76000 | San Francisco |
Charlie | 18 | F | 35000 | Chicago |
David | 47 | M | 98000 | Los Angeles |
Emily | 23 | F | 22000 | Boston |
数据集中包括5个人的个人信息,包括姓名、年龄、性别、收入和所在的城市。
SQL查询风格选择数据子集
Pandas提供了.query()
方法,它允许您使用类似SQL的查询语言来筛选数据子集。下面是一些例子:
选择全部记录
df.query('')
返回原来的数据集,因为传递了一个空字符串作为查询条件。
选择符合指定条件的记录
df.query('age > 30 and income > 50000')
返回年龄大于30岁且收入大于50000美元的人的个人信息。
name | age | gender | income | city |
---|---|---|---|---|
Bob | 32 | M | 76000 | San Francisco |
David | 47 | M | 98000 | Los Angeles |
使用变量作为查询条件
您可以使用变量来代替查询条件。在这种情况下,您需要在变量前加上@
符号。
age = 25
df.query('age == @age')
返回年龄为25岁的人的个人信息。
name | age | gender | income | city |
---|---|---|---|---|
Alice | 25 | F | 50000 | New York |
选择指定列
与SQL的SELECT
语句类似,您可以使用.query()
方法选择指定列。在查询语言中,使用SELECT
关键字将要选择的列名列出来。
df.query('age > 30 and income > 50000')[['name', 'income']]
返回所有年龄大于30岁且收入大于50000美元的人的姓名和收入。
name | income |
---|---|
Bob | 76000 |
David | 98000 |
选择不在某个列表中的值
使用not in
关键字可以选择在某个列表之外的值。
cities = ['New York', 'San Francisco']
df.query('city not in @cities')
返回不在纽约和旧金山的城市的人的个人信息。
name | age | gender | income | city |
---|---|---|---|---|
Charlie | 18 | F | 35000 | Chicago |
David | 47 | M | 98000 | Los Angeles |
Emily | 23 | F | 22000 | Boston |
使用模糊匹配
像SQL一样,Pandas的查询语言也支持使用LIKE
关键字来进行模糊匹配。使用LIKE
时,您可以使用%
符号作为通配符。下面是查询语言的例子:
df.query('name like "%i%"')
返回所有包含字母“i”的人的个人信息。
name | age | gender | income | city |
---|---|---|---|---|
Charlie | 18 | F | 35000 | Chicago |
David | 47 | M | 98000 | Los Angeles |
Emily | 23 | F | 22000 | Boston |
使用正则表达式
Pandas的查询语言还支持使用正则表达式作为查询条件。在这种情况下,您需要使用str
前缀来指定要查询的列是一个字符串类型,然后在正则表达式前面加上@
符号。下面是一个例子:
df.query('name.str.contains("@[aeiou]")', engine='python')
返回所有包含元音字母的人名字的个人信息。
name | age | gender | income | city |
---|---|---|---|---|
Alice | 25 | F | 50000 | New York |
Charlie | 18 | F | 35000 | Chicago |
Emily | 23 | F | 22000 | Boston |
复杂查询
您可以组合多个条件来进行复杂查询。下面是一个例子:
df.query('(income < 40000 and gender == "F") or (age > 40 and city == "San Francisco")')
返回符合以下条件之一的人的个人信息:
- 收入不足40000美元且为女性;
- 年龄大于40岁且所在城市为旧金山;
name | age | gender | income | city |
---|---|---|---|---|
Charlie | 18 | F | 35000 | Chicago |
Bob | 32 | M | 76000 | San Francisco |
结论
Pandas的.query()
方法允许您使用类似SQL的查询语言选择数据子集。使用.query()
方法时,您可以选择全部记录、选择符合指定条件的记录、使用变量作为查询条件、选择指定列、选择不在某个列表中的记录、使用模糊匹配和使用正则表达式等功能。通过熟练掌握Pandas的查询语言,您可以更轻松、更高效地处理数据集。