MySQL 如何使用Pandas SQL查询风格选择数据子集?

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的查询语言,您可以更轻松、更高效地处理数据集。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程