作者:usually111131 | 来源:互联网 | 2024-12-16 19:23
虽然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式数据操作,从而提高数据分析的效率和灵活性。