📜  将 sql 查询转换为 python pandas - SQL (1)

📅  最后修改于: 2023-12-03 14:53:45.171000             🧑  作者: Mango

将 SQL 查询转换为 Python Pandas - SQL

为了更好地理解和分析数据,SQL查询已成为许多人所知的一种强大的工具。但是,当我们需要在Python中处理大型数据集时,Pandas成为了我们不可或缺的工具之一。在本文中,我们将介绍如何将SQL查询转换为Pandas,以帮助程序员更好地使用Python进行数据操作。

1.连接到数据库

在使用Pandas之前,我们需要先连接到数据库并获取数据。Pandas支持许多数据库,如MySQL,SQLite,PostgreSQL等。在本文中,我们将使用SQLite作为示例数据库。

# 导入pandas库和sqlite3库
import pandas as pd
import sqlite3

# 连接到SQLite数据库
conn = sqlite3.connect('test.db')

# 查询数据
df = pd.read_sql_query("SELECT * from mytable", conn)

# 关闭连接
conn.close()

# 显示前5行数据
print(df.head())

在代码中,我们首先导入Pandas库和SQLite库,然后连接到SQLite数据库。接下来,我们使用pd.read_sql_query()函数将SQL查询转换为Pandas DataFrame对象,并将其存储在变量df中。最后,我们关闭数据库连接并显示前5行数据。

2.选择列

在SQL中,我们可以使用SELECT语句选择列。在Pandas中,我们可以使用df[column_name]df.loc[:, column_name]来选择列。

# 查询“name”列和“age”列
df_name_age = df.loc[:, ['name', 'age']]
print(df_name_age.head())

在上面的代码中,我们使用df.loc[:, ['name', 'age']]选择了“name”列和“age”列,并将其存储在变量df_name_age中。最后,我们显示前5行数据。

3.选择行

在SQL中,我们可以使用WHERE语句选择行。在Pandas中,我们可以使用布尔索引(Boolean Indexing)来选择行。

# 查询年龄大于25岁的人
df_age25 = df[df['age'] > 25]
print(df_age25.head())

在上面的代码中,我们使用df['age'] > 25创建了一个布尔索引,这个布尔索引的值为True表示该行的“age”列的值大于25,否则为False。然后,我们使用这个布尔索引选择了所有“age”列大于25的行,并将其存储在变量df_age25中。最后,我们显示前5行数据。

4.选择特定行和列

在SQL中,我们可以同时使用SELECTWHERE语句选择特定行和列。在Pandas中,我们可以将这两个操作组合在一起。

# 查询名字为“Tom”的年龄
df_tom = df.loc[df['name'] == 'Tom', ['age']]
print(df_tom)

在上面的代码中,我们使用df['name'] == 'Tom'创建了一个布尔索引,这个布尔索引的值为True表示该行的“name”列的值为“Tom”,否则为False。然后,我们使用这个布尔索引选择了所有“name”列为“Tom”的行,并选择了这些行的“age”列,并将其存储在变量df_tom中。最后,我们显示结果。

5.排序

在SQL中,我们可以使用ORDER BY语句对结果进行排序。在Pandas中,我们可以使用df.sort_values()函数进行排序。

# 按年龄从小到大排序
df_sorted = df.sort_values(by=['age'])
print(df_sorted.head())

在上面的代码中,我们使用df.sort_values(by=['age'])按“age”列从小到大对数据进行排序,并将其存储在变量df_sorted中。最后,我们显示前5行数据。

6.分组

在SQL中,我们可以使用GROUP BY语句对数据进行分组。在Pandas中,我们可以使用df.groupby()函数进行分组。

# 按年龄分组,并计算每个年龄的人数和平均值
df_grouped = df.groupby('age').agg({'age': 'count', 'income': 'mean'})
print(df_grouped.head())

在上面的代码中,我们使用df.groupby('age').agg()按“age”列进行分组,并对每组数据进行汇总。指定了两个汇总指标:对“age”列进行计数,对“income”列进行平均值计算,并将每组数据的结果存储在一个新的DataFrame中。最后,我们显示前5行数据。

结论

通过将SQL查询转换为Pandas,我们可以更方便地使用Python进行数据操作。Pandas不仅可以处理大型数据集,还提供了许多方便的函数和工具,让数据处理变得更加高效,易于上手。