Pandas 与 SQL 常用操作对比

在数据处理和分析领域,Pandas 和 SQL 都是非常强大的工具。虽然它们具有不同的语法和应用场景,但在很多操作上具有相似的功能。下面我们将详细对比 Pandas 和 SQL 在常见数据操作方面的异同。

一、数据读取与写入

SQL

在 SQL 中,读取数据通常是通过连接数据库,并使用 SELECT 语句从特定的表中获取数据。写入数据则可以使用 INSERT INTOUPDATEDELETE 等语句来进行操作。

例如,从名为 students 的表中读取所有数据:

SELECT * FROM students;

students 表中插入一条新记录:

INSERT INTO students (name, age) VALUES ('John Doe', 20);

Pandas

Pandas 提供了丰富的函数来读取各种格式的数据文件,如 read_csvread_excelread_json 等。写入数据也有相应的方法,如 to_csvto_excel 等。

例如,读取一个 CSV 文件:

import pandas as pd

df = pd.read_csv('students.csv')

将数据框写入 CSV 文件:

df.to_csv('new_students.csv', index=False)

二、数据选择与筛选

SQL

使用 SELECT 语句选择特定的列,通过 WHERE 子句进行条件筛选。

例如,选择 students 表中的 nameage 列:

SELECT name, age FROM students;

筛选年龄大于 18 岁的学生:

SELECT * FROM students WHERE age > 18;

Pandas

在 Pandas 中,通过列名列表选择列,使用布尔索引进行筛选。

例如,选择特定列:

df[['name', 'age']]

筛选年龄大于 18 岁的行:

df[df['age'] > 18]

三、排序

SQL

使用 ORDER BY 子句按照指定列进行排序,可指定升序(ASC,默认)或降序(DESC)。

例如,按照年龄升序排序:

SELECT * FROM students ORDER BY age ASC;

按照年龄降序排序:

SELECT * FROM students ORDER BY age DESC;

Pandas

使用 sort_values 方法进行排序,通过参数指定列名和排序顺序。

例如,按照年龄升序排序:

df.sort_values('age')

按照年龄降序排序:

df.sort_values('age', ascending=False)

四、分组聚合

SQL

通过 GROUP BY 子句将数据按照指定列分组,然后使用聚合函数(如 SUMAVGCOUNT 等)对每组进行计算。

例如,计算每个班级的学生人数:

SELECT class, COUNT(*) as student_count FROM students GROUP BY class;

计算每个班级的平均年龄:

SELECT class, AVG(age) as average_age FROM students GROUP BY class;

Pandas

使用 groupby 方法结合聚合函数(如 summeancount 等)实现分组聚合。

例如,计算每个班级的学生人数:

df.groupby('class')['id'].count()

计算每个班级的平均年龄:

df.groupby('class')['age'].mean()

五、连接(JOIN)

SQL

支持多种连接方式,如内连接(INNER JOIN)、左连接(LEFT JOIN)、右连接(RIGHT JOIN)和全外连接(FULL OUTER JOIN)。

例如,内连接两个表 studentscourses 基于共同的 student_id 列:

SELECT * FROM students INNER JOIN courses ON students.student_id = courses.student_id;

Pandas

可以使用 merge 方法实现类似的连接操作。

例如,内连接两个数据框 df_studentsdf_courses 基于共同的列:

pd.merge(df_students, df_courses, on='student_id')

六、数据更新与删除

SQL

使用 UPDATE 语句更新数据,DELETE 语句删除数据。

例如,将年龄为 20 的学生的姓名更新为 ‘Jane Doe’:

UPDATE students SET name = 'Jane Doe' WHERE age = 20;

删除年龄小于 15 岁的学生记录:

DELETE FROM students WHERE age < 15;

Pandas

更新数据可以通过直接赋值或使用相关方法,删除数据通常使用 drop 方法。

例如,更新年龄列的值:

df.loc[df['age'] == 20, 'name'] = 'Jane Doe'

删除特定行:

df = df.drop(df[df['age'] < 15].index)

七、创建新列

SQL

可以在 SELECT 语句中使用表达式创建新列。

例如,计算学生成绩的百分比:

SELECT score, score / 100 as score_percentage FROM grades;

Pandas

使用 assign 方法或直接进行计算创建新列。

例如,计算成绩的百分比:

df = df.assign(score_percentage = df['score'] / 100)

或者:

df['score_percentage'] = df['score'] / 100

八、数据去重

SQL

使用 DISTINCT 关键字去除重复行。

例如,获取不重复的班级列表:

SELECT DISTINCT class FROM students;

Pandas

使用 drop_duplicates 方法去重。

例如,去除数据框中重复的行:

df.drop_duplicates()

九、子查询

SQL

子查询是在一个查询内部嵌套另一个查询,用于更复杂的条件判断和数据获取。

例如,获取年龄大于平均年龄的学生:

SELECT * FROM students WHERE age > (SELECT AVG(age) FROM students);

Pandas

虽然 Pandas 没有直接对应的子查询概念,但可以通过多个步骤和函数的组合来实现类似的效果。

十、窗口函数

SQL

支持窗口函数,如 ROW_NUMBERRANKDENSE_RANK 等,用于在结果集中进行排名、累计计算等操作。

例如,为每个班级的学生按照年龄排序并编号:

SELECT class, age, ROW_NUMBER() OVER (PARTITION BY class ORDER BY age) as row_num FROM students;

Pandas

可以使用 rank 方法和分组操作来实现类似的排名功能。

例如,为每个班级的学生按照年龄排名:

df['rank'] = df.groupby('class')['age'].rank()

十一、数据类型处理

SQL

在创建表时定义列的数据类型,并且在操作中会进行相应的数据类型转换和验证。

Pandas

数据类型的处理相对灵活,可以通过 dtype 属性查看和修改数据框列的数据类型。

十二、性能和可扩展性

SQL

当处理大规模数据时,通常在关系型数据库中执行 SQL 操作具有更好的性能和可扩展性,尤其是在经过适当的索引优化和数据库配置的情况下。

Pandas

对于较小到中等规模的数据,Pandas 在内存中操作数据非常方便和高效。但对于非常大的数据量,可能会面临内存限制。

综上所述,Pandas 和 SQL 在数据处理和分析中各有优势。SQL 更适合与关系型数据库交互,处理大规模数据和复杂的事务操作。Pandas 则在数据探索、预处理和与 Python 生态系统的集成方面表现出色,适用于灵活的数据分析和快速原型开发。在实际应用中,根据具体的需求和数据场景,选择合适的工具能够提高工作效率和数据分析的质量。

  • 20
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

知识的宝藏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值