跳转至

Pandas 教程

Pandas 是 Python 数据分析的核心库之一,提供了高效、灵活的结构化数据处理工具。本教程将详细讲解 Pandas 的基础知识和高级用法,帮助你从入门到精通 Pandas。


目录

  1. Pandas 简介
  2. 安装 Pandas
  3. Pandas 数据结构
  4. Series
  5. DataFrame
  6. 数据导入与导出
  7. 读取 CSV 文件
  8. 读取 Excel 文件
  9. 读取 SQL 数据
  10. 导出数据
  11. 基础数据操作
  12. 查看数据
  13. 数据选择与切片
  14. 条件筛选
  15. 数据清洗与处理
  16. 处理缺失值
  17. 处理重复值
  18. 数据替换
  19. 数据变形与重塑
  20. 排序
  21. 透视表(pivot)与反透视(melt)
  22. 堆叠(stack)与取消堆叠(unstack)
  23. 数据分组与聚合
  24. GroupBy 操作
  25. 数据合并与拼接
  26. merge、concat、join 的区别与用法
  27. 时间序列操作
    • 日期时间数据处理
    • 时间序列重采样
  28. Pandas 高级操作
    • 窗口函数
    • 多重索引
  29. 性能优化技巧
    • 矢量化操作
    • 使用 apply() 函数的注意事项
    • 内存优化
  30. Pandas 实战案例

1. Pandas 简介

Pandas 是 Python 开发的开源数据分析库,专为快速灵活的数据处理而设计,特别适用于处理结构化数据(如表格型数据)。Pandas 提供了两个核心的数据结构:SeriesDataFrame,它们分别代表一维和二维的数据。

  • Series:一维标记数组,能存储任何数据类型。
  • DataFrame:二维表格结构,每列可以存储不同的数据类型。

2. 安装 Pandas

你可以使用以下命令通过 pipconda 安装 Pandas:

pip install pandas

或者通过 Anaconda 安装:

conda install pandas

安装完成后,可以使用以下代码检查 Pandas 是否安装成功:

import pandas as pd
print(pd.__version__)  # 显示 Pandas 版本

3. Pandas 数据结构

Pandas 的核心数据结构有两种:SeriesDataFrame。理解它们是掌握 Pandas 的基础。

3.1 Series

Series 是带有标签的一维数组。每个 Series 都有索引,可以通过索引值访问数据。

import pandas as pd

# 创建 Series
s = pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])
print(s)

输出:

a    1
b    2
c    3
d    4
dtype: int64
  • 索引访问Series 通过索引来访问数据:

python print(s['a']) # 输出 1

  • Series 的自动对齐:在进行运算时,Series 会根据索引自动对齐。

3.2 DataFrame

DataFrame 是 Pandas 中的二维数据结构,类似于 Excel 或 SQL 表。每列是一个 Series,可以存储不同类型的数据。

data = {
    'name': ['Alice', 'Bob', 'Charlie'],
    'age': [25, 30, 35],
    'city': ['New York', 'San Francisco', 'Los Angeles']
}

df = pd.DataFrame(data)
print(df)

输出:

       name  age           city
0     Alice   25       New York
1       Bob   30  San Francisco
2   Charlie   35    Los Angeles
  • 访问列:可以像字典一样通过列名访问列数据:

python print(df['name']) # 输出 name 列的数据

  • 访问行:可以通过 iloc[]loc[] 来访问行:

python print(df.iloc[0]) # 按位置选择第一行 print(df.loc[0]) # 按索引选择第一行


4. 数据导入与导出

Pandas 提供了从多种格式导入数据的功能,包括 CSV、Excel、SQL、JSON 等。

4.1 读取 CSV 文件

df = pd.read_csv('data.csv')
print(df.head())  # 查看数据的前 5 行

4.2 读取 Excel 文件

df = pd.read_excel('data.xlsx', sheet_name='Sheet1')

4.3 读取 SQL 数据

Pandas 可以使用 read_sql() 从 SQL 数据库中读取数据:

import sqlite3
conn = sqlite3.connect('database.db')

df = pd.read_sql('SELECT * FROM table_name', conn)

4.4 导出数据

将数据保存为 CSV 或 Excel 文件:

# 保存为 CSV
df.to_csv('output.csv', index=False)

# 保存为 Excel
df.to_excel('output.xlsx', index=False)

5. 基础数据操作

5.1 查看数据

  • head(n):查看前 n 行数据。
  • tail(n):查看后 n 行数据。
  • info():查看数据结构和类型信息。
  • describe():查看数值列的统计信息(如均值、标准差等)。
print(df.head(3))   # 查看前 3 行
print(df.info())    # 数据概览
print(df.describe()) # 数值统计信息

5.2 数据选择与切片

可以通过列名、行索引等方式进行数据选择与切片。

# 选择单列
print(df['name'])

# 选择多列
print(df[['name', 'age']])

# 通过 iloc 按行号选择数据
print(df.iloc[0])  # 第一行
print(df.iloc[1:3])  # 第二到第三行

# 通过 loc 按索引选择数据
print(df.loc[0])   # 选择索引为 0 的行

5.3 条件筛选

通过条件过滤筛选数据:

# 筛选年龄大于 30 的行
filtered_df = df[df['age'] > 30]
print(filtered_df)

6. 数据清洗与处理

在处理真实数据时,经常需要对数据进行清洗和预处理,Pandas 提供了一系列强大的工具来帮助清理数据。

6.1 处理缺失值

使用 isnull()notnull() 来检查数据中的缺失值。可以通过 dropna() 删除缺失值,或使用 fillna() 替换缺失值。

# 检查是否有缺失值
print(df.isnull())

# 删除缺失值所在的行
df_cleaned = df.dropna()

# 用指定值替换缺失值
df_filled = df.fillna(0)

6.2 处理重复值

使用 drop_duplicates() 来删除重复行。

df_unique = df.drop_duplicates()

6.3 数据替换

使用 replace() 替换指定的值:

df_replaced = df.replace({'New York': 'NYC'})

7. 数据变形与重塑

7.1 排序

Pandas 提供了多种排序功能,可以使用 sort_values() 对数据进行排序。

# 按 age 列排序
df_sorted = df.sort_values('age')

7.2 数据透视与反透视

Pandas 支持数据的宽表和长表转换,常用的函数是 pivot()melt()

  • pivot():将长表数据转为宽表。
  • melt():将宽表数据转为长表。
# 透视表
pivot_df = df.pivot(index='name', columns='city', values='age')

# 反透视
melted_df = pd.melt(df, id_vars=['name'], value_vars=['age', 'city'])

7.3 堆叠与取消堆叠

  • 堆叠:将列转为行。
  • 取消堆叠:将行转为列。
stacked = df.stack()  # 堆叠
unstacked = stacked.unstack()  # 取消堆叠

8. 数据分组与

聚合

groupby() 提供了强大的分组功能,可以根据指定的列进行分组并应用聚合函数。

# 按 city 分组并计算平均 age
grouped = df.groupby('city')['age'].mean()
print(grouped)

9. 数据合并与拼接

Pandas 提供了灵活的数据合并和拼接功能,常用的有 merge()concat()join()

  • merge():类似 SQL 的 JOIN 操作。
  • concat():沿行或列拼接多个 DataFrame
  • join():用于基于索引的合并。
# 合并
df1 = pd.DataFrame({'key': ['A', 'B'], 'value1': [1, 2]})
df2 = pd.DataFrame({'key': ['A', 'B'], 'value2': [3, 4]})
merged_df = pd.merge(df1, df2, on='key')

# 拼接
concat_df = pd.concat([df1, df2], axis=1)

10. 时间序列操作

Pandas 内置了对时间序列数据的处理功能,包括日期时间数据的解析、索引和重采样等。

10.1 日期时间数据处理

# 创建时间索引
dates = pd.date_range('2023-01-01', periods=5)
df_time = pd.DataFrame({'data': [1, 2, 3, 4, 5]}, index=dates)

10.2 时间序列重采样

使用 resample() 对时间序列数据进行重采样,例如按天、按月进行聚合。

# 重采样为每 2 天的数据求和
resampled = df_time.resample('2D').sum()

11. Pandas 高级操作

11.1 窗口函数

窗口函数允许你对滚动窗口中的数据进行操作。

df['rolling_mean'] = df['age'].rolling(window=2).mean()

11.2 多重索引

MultiIndex 允许你为行或列创建多层次的索引。

df_multi = df.set_index(['name', 'city'])

12. Pandas 性能优化

Pandas 提供了高效的数据处理功能,但在处理大型数据集时,可以进一步优化代码性能。

  • 矢量化操作:尽量使用 Pandas 的矢量化操作,避免使用 for 循环。

  • apply() 的注意事项:虽然 apply() 提供了灵活性,但其性能较慢,应尽量避免在大型数据集上使用。

  • 内存优化:使用 dtype 参数来控制列的数据类型,节省内存。


13. Pandas 实战案例

通过 Pandas 完成一次完整的数据分析流程: 1. 从多种数据源中读取数据。 2. 处理缺失值和重复值。 3. 数据转换、分组与聚合操作。 4. 导出最终清洗后的数据。


以上便是 Pandas 从入门到精通的详细教程,涵盖了基础知识、数据操作、数据清洗与转换、时间序列处理、数据合并以及性能优化等多个方面。希望这些内容能够帮助你全面掌握 Pandas 的使用技巧。