对比 pandas 与 SQL:使用 SQL 实现 pandas 的经典操作

在数据分析中,pandas 和 SQL 都是非常重要的工具。虽然它们工作在不同的环境中(pandas 是 Python 的库,SQL 是查询数据库的语言),但许多操作是相似的。本文将对比 pandas 的经典操作,并展示如何用 SQL 来实现相同的功能。

目录

  1. 读取数据
  2. 选择列
  3. 过滤行
  4. 排序数据
  5. 分组聚合
  6. 连接表
  7. 应用函数
  8. 处理缺失值
  9. 添加新列
  10. 重命名列
  11. 数据类型转换
  12. 透视表操作

读取数据

Pandas

import pandas as pd
df = pd.read_csv('data.csv')

SQL

-- 从表中选择所有数据
SELECT * FROM table_name;

选择列

Pandas

df_selected = df[['column1', 'column2']]

SQL

SELECT column1, column2 FROM table_name;

过滤行

Pandas

df_filtered = df[df['column'] > 10]

SQL

SELECT * FROM table_name
WHERE column > 10;

排序数据

Pandas

df_sorted = df.sort_values(by='column', ascending=False)

SQL

SELECT * FROM table_name
ORDER BY column DESC;

分组聚合

Pandas

df_grouped = df.groupby('column').agg({'value_column': 'mean'})

SQL

SELECT column, AVG(value_column) as mean_value
FROM table_name
GROUP BY column;

连接表

Pandas

df_merged = pd.merge(df1, df2, on='key', how='inner')

SQL

SELECT *
FROM table1
INNER JOIN table2
ON table1.key = table2.key;

应用函数

Pandas

df['new_column'] = df['column'].apply(lambda x: x * 2)

SQL

SELECT *, (column * 2) as new_column
FROM table_name;

处理缺失值

Pandas

  • 删除缺失值

    df_dropna = df.dropna()
    
  • 填充缺失值

    df_fillna = df.fillna(0)
    

SQL

  • 删除缺失值

    SELECT * FROM table_name
    WHERE column IS NOT NULL;
    
  • 填充缺失值

    SELECT COALESCE(column, 0) as column
    FROM table_name;
    

添加新列

Pandas

df['new_column'] = df['column1'] + df['column2']

SQL

SELECT *, (column1 + column2) as new_column
FROM table_name;

重命名列

Pandas

df_renamed = df.rename(columns={'old_name': 'new_name'})

SQL

SELECT column as new_name
FROM table_name;

数据类型转换

Pandas

df['column'] = df['column'].astype(float)

SQL

SELECT CAST(column AS FLOAT) as column
FROM table_name;

透视表操作

Pandas

df_pivot = df.pivot_table(index='column1', columns='column2', values='value_column', aggfunc='sum')

SQL

SQL 不直接支持透视操作,但可以使用条件聚合来模拟:

SELECT
  column1,
  SUM(CASE WHEN column2 = 'value1' THEN value_column ELSE 0 END) as value1_sum,
  SUM(CASE WHEN column2 = 'value2' THEN value_column ELSE 0 END) as value2_sum
FROM table_name
GROUP BY column1;

总结

pandas 和 SQL 在数据处理中有许多相似的操作。理解两者之间的对应关系有助于在不同的环境中应用相同的分析技巧。无论是数据筛选、排序、分组聚合还是数据清洗,都可以找到对应的方法来实现。

10-05 16:21