热门标签 | 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式数据操作,从而提高数据分析的效率和灵活性。


推荐阅读
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社区 版权所有