当前位置: 首页> 娱乐> 明星 > Pandas 与 SQL 常用操作对比

Pandas 与 SQL 常用操作对比

时间:2025/7/8 11:42:58来源:https://blog.csdn.net/TalorSwfit20111208/article/details/141232758 浏览次数:0次

在数据处理和分析领域,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 pddf = 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 生态系统的集成方面表现出色,适用于灵活的数据分析和快速原型开发。在实际应用中,根据具体的需求和数据场景,选择合适的工具能够提高工作效率和数据分析的质量。

关键字:Pandas 与 SQL 常用操作对比

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: