热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

探索Pandas中的SQL式数据操作技巧

虽然SQL因其直观易学的语法受到广泛欢迎,但转向Pandas进行数据处理时,初学者可能会感到不适应。本文旨在通过一系列实例,展示如何在Pandas中实现类似SQL的数据查询功能。

引言

SQL语言以其直观的语法和强大的数据查询能力著称,这使得它成为数据库管理系统的首选工具。然而,当用户转向Pandas这一Python库进行数据分析时,可能会发现Pandas的操作方式不如SQL那样直观,尤其是对于那些已经熟悉SQL的用户而言。本文将作为一份指南,帮助读者理解如何在Pandas中执行类似于SQL的数据操作。

目录

  • 行选择
  • 表合并
  • 表过滤
  • 值排序
  • 聚合操作

1. 行选择

选择所有行

在Pandas中,选择整个DataFrame的所有行,可以直接调用该DataFrame的对象名。

# SQL
SELECT * FROM table_df

# Pandas
table_df

选择特定列

若需选择DataFrame中的特定列,可以在双括号中列出所需的列名。

# SQL
SELECT column_a, column_b FROM table_df

# Pandas
table_df[['column_a', 'column_b']]

获取唯一值

要获取某一列的不同值,可以使用.drop_duplicates()方法。

# SQL
SELECT DISTINCT column_a FROM table_df

# Pandas
table_df['column_a'].drop_duplicates()

重命名列

如果需要重命名列,可以使用.rename()方法。

# SQL
SELECT column_a AS Apple, column_b AS Banana FROM table_df

# Pandas
table_df[['column_a', 'column_b']].rename(columns={'column_a': 'Apple', 'column_b': 'Banana'})

条件选择

对于SQL中的“SELECT CASE WHEN”语句,Pandas提供了np.select()方法,允许根据多个条件选择不同的值。

# SQL
SELECT CASE WHEN column_a > 30 THEN 'Large' ELSE 'Small' END AS Size FROM table_df

# Pandas
cOnditions= [table_df['column_a'] > 30]
choices = ['Large', 'Small']
table_df['Size'] = np.select(conditions, choices, default='Small')

2. 表合并

内连接/左连接/右连接

使用.merge()方法可以轻松实现不同类型的表连接,如内连接、左连接或右连接。

# SQL
SELECT * FROM table_1 t1 LEFT JOIN table_2 t2 ON t1.lkey = t2.rkey

# Pandas
table_1.merge(table_2, left_on='lkey', right_on='rkey', how='left')

联合所有记录

若需将两个DataFrame的所有记录合并,可使用pd.concat()方法。

# SQL
SELECT * FROM table_1 UNION ALL SELECT * FROM table_2

# Pandas
final_table = pd.concat([table_1, table_2])

3. 表过滤

基本过滤

在Pandas中,可以通过在方括号中定义条件来实现类似于SQL WHERE子句的功能。

# SQL
SELECT * FROM table_df WHERE column_a = 1

# Pandas
table_df[table_df['column_a'] == 1]

选择并过滤列

如果需要选择并过滤特定列,可以组合使用方括号中的条件和列名。

# SQL
SELECT column_a FROM table_df WHERE column_b = 1

# Pandas
table_df[table_df['column_b'] == 1]['column_a']

多条件过滤

若需根据多个条件过滤数据,可以在方括号中使用逻辑运算符&(与)来组合多个条件。

# SQL
SELECT * FROM table_df WHERE column_a = 1 AND column_b = 2

# Pandas
table_df[(table_df['column_a'] == 1) & (table_df['column_b'] == 2)]

模糊匹配

SQL中的LIKE操作符在Pandas中可以通过.str.contains()方法实现,支持大小写不敏感的匹配。

# SQL
SELECT * FROM table_df WHERE column_a LIKE '%ball%'

# Pandas
table_df[table_df['column_a'].str.contains('ball', case=False)]

列表过滤

如果需要检查某列的值是否属于一个给定的列表,可以使用.isin()方法。

# SQL
SELECT * FROM table_df WHERE column_a IN ('Canada', 'USA')

# Pandas
table_df[table_df['column_a'].isin(['Canada', 'USA'])]

4. 值排序

单列排序

在Pandas中,可以使用.sort_values()方法对DataFrame中的值进行排序,通过设置'ascending'参数来控制排序的方向。

# SQL
SELECT * FROM table_df ORDER BY column_a DESC

# Pandas
table_df.sort_values('column_a', ascending=False)

多列排序

若需根据多个列进行排序,可以在.sort_values()方法的参数中指定多个列名及其对应的排序方向。

# SQL
SELECT * FROM table_df ORDER BY column_a DESC, column_b ASC

# Pandas
table_df.sort_values(['column_a', 'column_b'], ascending=[False, True])

5. 聚合操作

计算唯一值的数量

在Pandas中,可以使用.groupby().nunique()来计算分组后的唯一值数量。

# SQL
SELECT column_a, COUNT(DISTINCT ID) FROM table_df GROUP BY column_a

# Pandas
table_df.groupby('column_a')['ID'].nunique()

求和

若需计算某一列的总和,可以使用.groupby().sum()方法。

# SQL
SELECT column_a, SUM(revenue) FROM table_df GROUP BY column_a

# Pandas
table_df.groupby('column_a')['revenue'].sum()

平均值

计算某一列的平均值,可以使用.groupby().mean()方法。

# SQL
SELECT column_a, AVG(revenue) FROM table_df GROUP BY column_a

# Pandas
table_df.groupby('column_a')['revenue'].mean()

总结

尽管Pandas是一个强大的数据分析工具,但在某些方面,它的操作可能不如SQL直观。通过上述示例,希望读者能够更加熟练地掌握如何在Pandas中执行常见的SQL式数据操作,从而提高数据分析的效率和灵活性。


推荐阅读
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 构建基于BERT的中文NL2SQL模型:一个简明的基准
    本文探讨了将自然语言转换为SQL语句(NL2SQL)的任务,这是人工智能领域中一项非常实用的研究方向。文章介绍了笔者在公司举办的首届中文NL2SQL挑战赛中的实践,该比赛提供了金融和通用领域的表格数据,并标注了对应的自然语言与SQL语句对,旨在训练准确的NL2SQL模型。 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
  • 本文深入探讨了 Java 中的 Serializable 接口,解释了其实现机制、用途及注意事项,帮助开发者更好地理解和使用序列化功能。 ... [详细]
  • 在Ubuntu 16.04 LTS上配置Qt Creator开发环境
    本文详细介绍了如何在Ubuntu 16.04 LTS系统中安装和配置Qt Creator,涵盖了从下载到安装的全过程,并提供了常见问题的解决方案。 ... [详细]
  • 本文详细介绍了如何构建一个高效的UI管理系统,集中处理UI页面的打开、关闭、层级管理和页面跳转等问题。通过UIManager统一管理外部切换逻辑,实现功能逻辑分散化和代码复用,支持多人协作开发。 ... [详细]
  • 本文介绍了如何通过 Maven 依赖引入 SQLiteJDBC 和 HikariCP 包,从而在 Java 应用中高效地连接和操作 SQLite 数据库。文章提供了详细的代码示例,并解释了每个步骤的实现细节。 ... [详细]
  • 本文介绍如何通过创建替代插入触发器,使对视图的插入操作能够正确更新相关的基本表。涉及的表包括:飞机(Aircraft)、员工(Employee)和认证(Certification)。 ... [详细]
  • Ralph的Kubernetes进阶之旅:集群架构与对象解析
    本文深入探讨了Kubernetes集群的架构和核心对象,详细介绍了Pod、Service、Volume等基本组件,以及更高层次的抽象如Deployment、StatefulSet等,帮助读者全面理解Kubernetes的工作原理。 ... [详细]
  • MySQL 数据库迁移指南:从本地到远程及磁盘间迁移
    本文详细介绍了如何在不同场景下进行 MySQL 数据库的迁移,包括从一个硬盘迁移到另一个硬盘、从一台计算机迁移到另一台计算机,以及解决迁移过程中可能遇到的问题。 ... [详细]
  • Hadoop入门与核心组件详解
    本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ... [详细]
  • 解决Element UI中Select组件创建条目为空时报错的问题
    本文介绍如何在Element UI的Select组件中使用allow-create属性创建新条目,并处理创建条目为空时出现的错误。我们将详细说明filterable属性的必要性,以及default-first-option属性的作用。 ... [详细]
  • 本文介绍如何使用JPA Criteria API创建带有多个可选参数的动态查询方法。当某些参数为空时,这些参数不会影响最终查询结果。 ... [详细]
author-avatar
usually111131
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有