Pandas 对 Pandas 数据集执行 SQL查询

Pandas 对 Pandas 数据集执行 SQL查询

在本文中,我们将介绍如何使用 Pandas 在数据集上执行 SQL 查询。PandasPython 的一个强大的数据分析工具,它提供了多种用于数据处理和分析的功能。

阅读更多:Pandas 教程

需要的安装

首先需要安装 Pandas 和一些其他必要的 Python 模块。可以使用 pip 安装 Pandas和SQLalchemy库。

pip install pandas
pip install sqlalchemy
Python

确保已经成功安装这两个库,可以用以下代码检查:

import pandas as pd
import sqlalchemy
print(pd.__version__)
print(sqlalchemy.__version__)
Python

导入数据

用 Pandas 执行 SQL 查询,首先需要创建一个数据集。在这里我们使用 CSV 文件作为样例,这个文件可以用到 Titanic 数据集。

以下代码导入数据集:

df = pd.read_csv("titanic.csv")
Python

Pandas 数据集通常是由多个列组成,例如在上述输入中,我们有年龄、性别、班舱和生存的列。

使用SQL 语句执行查询

Pandas可以使用 SQL 语句执行查询。此外,有许多在 Pandas 中使用 SQL 语句做数据需求时异常易用的 packages,其中一种最为惊人的是 pandasql。

以下是我们如何用 Pandas 和 pandasql 使用 SQL 语句来筛选 Titanic 数据集中的幸存者:

from pandasql import sqldf
pysqldf = lambda q: sqldf(q, globals())
sql = '''SELECT Survived, COUNT(*) as count FROM df GROUP BY Survived'''
pysqldf(sql)
Python

这会显示存活者总数,如下所示:

   Survived  count
0         0    549
1         1    342
Python

此外,我们可以对筛选出的数据进行一些计算。以下是如何选择年龄和生存列,然后按生存列进行分组,计算总数、平均数和标准差。

sql = '''
      SELECT Survived, AVG(Age), COUNT(*), STD(Age) FROM df
      GROUP BY Survived
      '''
pysqldf(sql)
Python

这会显示存活者的平均年龄、数量比例和标准偏差,如下所示:

   Survived   AVG(Age)  COUNT(*)  STD(Age)
0         0  30.626179       424  14.172110
1         1  28.343690       290  14.950952
Python

筛选数据集

下面,我们来看看如何使用 Pandas 的筛选功能来列举 Titanic 数据集中18岁以上的乘客:

df[df['Age'] > 18]
Python

在这里,df[‘Age’] > 18 返回一个布尔数组,这个数组指示哪些行满足条件。我们将这个布尔数组传递给 DataFrame,DataFrame 将会负责保留仅与 True 对应的行。

我们也可以使用更复杂的筛选条件,例如列出年龄在20至40岁之间的女性乘客。

df[(df['Age'] > 20) & (df['Age'] < 40) & (df['Sex'] == 'female')]
Python

在这里,括号中的每个表达式都返回一个 True 或 False 数组,表示数据帧中那些行满足条件。然后我们将这些数组通过 & 连接,并将结果传递给数据帧,获得符合条件的行。

如果我们需要挑选出整个数据集中的某些特定列,可以使用 loc 来实现。以下是如何筛选特定列的代码:

df.loc[df['Age'] > 18, ['Survived', 'Age']]
Python

在 loc 中,第一个参数指定了行的筛选方法,而第二个参数指定了需要挑选的列。在这个例子中,我们只需要选择 Survived 和 Age 两列。

分组和聚合数据

使用 Pandas 的 groupby 方法,我们可以将数据集分成不同的组,并对每个组应用相同的聚合函数(例如 sum、mean、count 等)。

以下是如何按性别计算幸存者人数:

df.groupby('Sex')['Survived'].sum()
Python

在这里,我们使用 groupby 方法将数据集依据性别分组,并使用 sum 函数计算每个分组的 Survived 列之和。

此外,还可以使用 DataFrame 的 pivot_table 方法将数据集转换为一个交叉表,并使用分组和聚合功能,汇总原始数据。以下是如何按性别和班舱计算幸存者和遇难者人数:

df.pivot_table('PassengerId', ['Sex'], 'Pclass', aggfunc='count', margins=True)
Python

在 pivot_table 中,第一个参数指定了聚合的列,第二个参数指定了行分组列,第三个参数给出了列分组列,而 aggfunc 给出了聚合函数。margins=True 指示计算汇总行和列。

描述数据

描述性统计是摘要和理解数据的一种方法,可以使用 Pandas 包中的描述性统计函数快速执行此操作。以下是在 Titanic 数据集上计算数值型列的描述性统计函数。

df.describe()
Python

该函数将把所有数值型列作为数据帧返回,包括列计数、平均值、标准差、最小值、25%分位数、中位数、75%分位数和最大值。

数据清理

数据清洗是数据科学家的日常工作之一。在 Pandas 中,可以使用许多函数处理缺失的、重复的和异常值。

处理缺失值

使用 Pandas 中的 isnull 和 notnull 函数可以找出数据集中的缺失值。以下是如何计算 Age 列中的缺失值数量:

df['Age'].isnull().sum()
Python

缺失值可以通过 fillna 方法替换为特定的值。例如,以下代码将 Age 列中的缺失值替换为这列的平均值:

df['Age'].fillna(df['Age'].mean(), inplace=True)
Python

在这里,inplace 参数指示是否更新原始数据集。

处理重复值

使用 Pandas 中的 duplicated 函数可以找到数据集中的重复值。以下是如何计算数据集中的重复项数:

df.duplicated().sum()
Python

使用 drop_duplicates 方法可以删除数据集中的重复值。以下是在特定列(PassengerId 列)中删除重复值的示例:

df.drop_duplicates(subset='PassengerId', inplace=True)
Python

处理异常值

有时,数据集中的值可能超出了合理的范围。可以使用 Pandas 中的 clip 方法将超出指定阈值范围的值替换为指定最大值或最小值。以下是如何将 Age 列中超出 0 至 100 范围的值替换为 0 或 100。

df['Age'] = df['Age'].clip(0, 100)
Python

总结

本文介绍了如何使用 Pandas 在数据集上执行 SQL 查询,对数据集进行筛选、分组、聚合和描述性统计,以及处理缺失值、重复值和异常值。Pandas 是 Python 用于数据分析的有力工具之一,具有强大而易于使用的功能。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册