Pandas 是 Python 中功能强大的数据分析工具,用于处理和分析结构化数据。本文将通过分步骤的方式,详细介绍如何使用 Pandas 进行数据分组、重塑、透视表、时间序列处理、类别型数据管理以及数据可视化。这些知识点将帮助初学者快速上手并掌握 Pandas 的核心功能。
数据分组(Grouping)
数据分组是数据分析中的常见操作,Pandas 的 groupby()
方法允许我们按列对数据进行分组,然后对每个组执行聚合运算,如计算平均值、总和等。
按列分组并计算平均值
在数据分析中,经常需要根据某一列对数据进行分组,并计算每个组的统计指标。以下是按 Name
列分组并计算每组 Age
列平均值的示例:
python
import pandas as pd
# 示例数据
data = {
'Name': ['Alice', 'Bob', 'Charlie', 'Alice', 'Bob', 'Charlie'],
'Age': [26, 30, 35, 24, 29, 37],
'Score': [85, 90, 88, 75, 95, 85]
}
df = pd.DataFrame(data)
# 按 Name 列分组,并计算每组的平均值
grouped = df.groupby('Name').mean()
print(grouped)
输出结果如下:
Age Score
Name
Alice 25.0 80.0
Bob 29.5 92.5
Charlie 36.0 86.5
在这个例子中,数据按 Name
列分组,并计算每个名字的 Age
和 Score
的平均值。groupby()
方法允许对分组数据执行各种聚合操作,如 mean()
、sum()
、count()
等。
数据重塑(Reshaping)
数据重塑涉及将数据从一种格式转换为另一种格式。Pandas 提供了多种方法来重塑数据结构,以下是常用的堆叠(stack)操作。
堆叠(Stack)
stack()
方法将 DataFrame
的列"堆叠"为行,将宽格式数据转换为长格式。
python
# 示例数据
df = pd.DataFrame({
'Name': ['Alice', 'Bob', 'Charlie'],
'Age': [26, 30, 35],
'Score': [85, 90, 88]
})
# 使用 stack() 方法将数据堆叠
stacked = df.stack()
print(stacked)
输出结果如下:
0 Name Alice
Age 26
Score 85
1 Name Bob
Age 30
Score 90
2 Name Charlie
Age 35
Score 88
dtype: object
在此示例中,stack()
将原本的列转换为行,将每个数据点进行堆叠。这种格式在多维数据处理中非常有用。
数据透视表(Pivot Tables)
数据透视表是一种用于汇总和分析多维数据的工具。Pandas 的 pivot_table()
方法使得创建数据透视表变得简单。
创建透视表
我们可以使用 pivot_table()
方法,基于特定列的值进行聚合分析。
python
# 示例数据
df = pd.DataFrame({
'Name': ['Alice', 'Bob', 'Charlie', 'Alice', 'Bob', 'Charlie'],
'Age': [26, 30, 35, 24, 29, 37],
'Score': [85, 90, 88, 75, 95, 85]
})
# 创建透视表
pivot = df.pivot_table(values='Age', index='Name', aggfunc='mean')
print(pivot)
输出结果如下:
Age
Name
Alice 25.0
Bob 29.5
Charlie 36.0
在这个例子中,我们生成了一个透视表,该表根据 Name
分组,并计算每个名字的平均年龄。
时间序列(TimeSeries)
时间序列数据在数据分析中扮演着重要角色,Pandas 提供了一系列工具来处理时间序列数据。
生成日期范围
date_range()
方法用于生成一系列连续的日期,通常用于时间序列数据的初始化。
python
# 生成日期范围
rng = pd.date_range('2024-01-01', periods=10, freq='D')
print(rng)
输出结果如下:
DatetimeIndex(['2024-01-01', '2024-01-02', '2024-01-03', '2024-01-04',
'2024-01-05', '2024-01-06', '2024-01-07', '2024-01-08',
'2024-01-09', '2024-01-10'],
dtype='datetime64[ns]', freq='D')
处理时间序列数据
使用 Pandas,我们可以轻松创建和操作时间序列数据。
python
# 创建时间序列数据
ts = pd.Series(range(10), index=rng)
print(ts)
输出结果如下:
2024-01-01 0
2024-01-02 1
2024-01-03 2
2024-01-04 3
2024-01-05 4
2024-01-06 5
2024-01-07 6
2024-01-08 7
2024-01-09 8
2024-01-10 9
Freq: D, dtype: int64
类别型数据(Categoricals)
Pandas 提供了对类别型数据的特殊支持,通过使用类别型数据,可以减少内存使用并加快操作速度。
转换为类别型数据
使用 astype('category')
方法可以将数据列转换为类别型数据。
python
# 示例数据
df = pd.DataFrame({
'Name': ['Alice', 'Bob', 'Charlie', 'Alice', 'Bob', 'Charlie'],
'Age': [26, 30, 35, 24, 29, 37]
})
# 将 Name 列转换为类别型数据
df['Category'] = df['Name'].astype('category')
print(df['Category'])
输出结果如下:
0 Alice
1 Bob
2 Charlie
3 Alice
4 Bob
5 Charlie
Name: Category, dtype: category
Categories (3, object): ['Alice', 'Bob', 'Charlie']
数据可视化
Pandas 内置了简单的绘图功能,可以快速生成图表,以便更直观地分析数据。
绘制折线图
通过 plot()
方法,Pandas 可以快速绘制折线图,帮助我们观察数据的趋势。
python
# 绘制折线图
df = pd.DataFrame({
'Date': pd.date_range('2024-01-01', periods=5),
'Value': [1, 3, 2, 4, 5]
})
df.plot(x='Date', y='Value')
这个示例中,plot()
方法会自动选择适当的绘图类型,并生成日期与数值的折线图。
绘制柱状图
你也可以使用 plot(kind='bar')
来绘制柱状图,以对比不同类别的数值。
python
# 绘制柱状图
df['Value'].plot(kind='bar')
这种柱状图适合用于对比不同类别或时间段内的数值,便于快速了解各类数据之间的差异。