Pandas 教程
Pandas 是 Python 数据分析的核心库之一,提供了高效、灵活的结构化数据处理工具。本教程将详细讲解 Pandas 的基础知识和高级用法,帮助你从入门到精通 Pandas。
目录
- Pandas 简介
- 安装 Pandas
- Pandas 数据结构
- Series
- DataFrame
- 数据导入与导出
- 读取 CSV 文件
- 读取 Excel 文件
- 读取 SQL 数据
- 导出数据
- 基础数据操作
- 查看数据
- 数据选择与切片
- 条件筛选
- 数据清洗与处理
- 处理缺失值
- 处理重复值
- 数据替换
- 数据变形与重塑
- 排序
- 透视表(pivot)与反透视(melt)
- 堆叠(stack)与取消堆叠(unstack)
- 数据分组与聚合
- GroupBy 操作
- 数据合并与拼接
- merge、concat、join 的区别与用法
- 时间序列操作
- 日期时间数据处理
- 时间序列重采样
- Pandas 高级操作
- 窗口函数
- 多重索引
- 性能优化技巧
- 矢量化操作
- 使用
apply()
函数的注意事项 - 内存优化
- Pandas 实战案例
1. Pandas 简介
Pandas 是 Python 开发的开源数据分析库,专为快速灵活的数据处理而设计,特别适用于处理结构化数据(如表格型数据)。Pandas 提供了两个核心的数据结构:Series
和 DataFrame
,它们分别代表一维和二维的数据。
- Series:一维标记数组,能存储任何数据类型。
- DataFrame:二维表格结构,每列可以存储不同的数据类型。
2. 安装 Pandas
你可以使用以下命令通过 pip
或 conda
安装 Pandas:
pip install pandas
或者通过 Anaconda 安装:
conda install pandas
安装完成后,可以使用以下代码检查 Pandas 是否安装成功:
import pandas as pd
print(pd.__version__) # 显示 Pandas 版本
3. Pandas 数据结构
Pandas 的核心数据结构有两种:Series
和 DataFrame
。理解它们是掌握 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 的使用技巧。