Pandas-5:数据分析与统计
本章将深入讲解Pandas在数据分析中的常用功能,包括基本统计描述、分组操作、数据聚合以及时间序列分析。
1.1 数据的基本统计描述
Pandas提供了丰富的统计方法,用于快速了解数据的分布和特性。
1.1.1 描述性统计
使用describe
方法生成数据的基本统计信息。
import pandas as pd
data = {'Age': [25, 30, 35, 40], 'Score': [85, 90, 95, 100]}
df = pd.DataFrame(data)
# 生成描述性统计信息
print(df.describe())
输出:
Age Score
count 4.000000 4.00000
mean 32.500000 92.50000
std 6.454972 6.45497
min 21.000000 81.00000
25% 28.750000 88.75000
50% 32.500000 92.50000
75% 36.250000 96.25000
max 40.000000 100.00000
1.1.2 常用统计方法
Pandas提供了直接计算统计指标的方法。
# 平均值
print(df['Age'].mean())
# 中位数
print(df['Score'].median())
# 标准差
print(df['Age'].std())
# 最大值和最小值
print(df['Score'].max(), df['Score'].min())
1.2 数据分组与聚合
1.2.1 分组操作
使用groupby
方法按某列对数据进行分组。
data = {'Department': ['HR', 'IT', 'HR', 'IT'], 'Salary': [5000, 6000, 5500, 6500]}
df = pd.DataFrame(data)
# 按部门分组
grouped = df.groupby('Department')
# 查看分组后的数据
for name, group in grouped:
print(name)
print(group)
1.2.2 聚合操作
在分组的基础上进行聚合,使用agg
方法灵活指定聚合方式。
# 计算各部门平均工资
average_salary = grouped['Salary'].mean()
print(average_salary)
# 使用多个聚合函数
aggregated = grouped['Salary'].agg(['mean', 'sum', 'max'])
print(aggregated)
1.3 数据的透视与交叉表
1.3.1 数据透视表
pivot_table
提供了灵活的数据汇总方式。
data = {'Name': ['Alice', 'Bob', 'Alice', 'Bob'],
'Month': ['Jan', 'Jan', 'Feb', 'Feb'],
'Sales': [250, 300, 400, 350]}
df = pd.DataFrame(data)
# 创建透视表
pivot = df.pivot_table(values='Sales', index='Name', columns='Month', aggfunc='sum')
print(pivot)
1.3.2 交叉表
crosstab
用于计算分类变量的频率分布。
# 创建交叉表
cross = pd.crosstab(df['Name'], df['Month'])
print(cross)
1.4 时间序列分析
Pandas内置了对时间序列数据的支持,便于处理日期和时间。
1.4.1 日期与时间操作
使用to_datetime
方法将字符串转换为时间对象。
data = {'Date': ['2024-01-01', '2024-01-02', '2024-01-03'], 'Value': [100, 200, 150]}
df = pd.DataFrame(data)
# 转换为时间类型
df['Date'] = pd.to_datetime(df['Date'])
# 提取年、月、日
df['Year'] = df['Date'].dt.year
df['Month'] = df['Date'].dt.month
df['Day'] = df['Date'].dt.day
print(df)
1.4.2 时间序列索引
将时间列设置为索引,便于时间序列操作。
df.set_index('Date', inplace=True)
# 按时间范围筛选
filtered = df['2024-01-01':'2024-01-02']
print(filtered)
1.4.3 重采样与窗口操作
重采样和窗口操作可用于聚合或平滑时间序列数据。
# 按周重采样
weekly = df.resample('W').mean()
print(weekly)
# 滑动窗口计算
rolling = df['Value'].rolling(window=2).mean()
print(rolling)
1.5 高级数据分析操作
1.1.1 分组与多级索引
分组操作可以结合多级索引处理复杂数据。
data = {'Category': ['A', 'A', 'B', 'B'], 'SubCategory': ['X', 'Y', 'X', 'Y'], 'Value': [100, 150, 200, 250]}
df = pd.DataFrame(data)
# 按多列分组
grouped = df.groupby(['Category', 'SubCategory']).sum()
print(grouped)
1.1.2 自定义聚合函数
使用apply
方法实现自定义聚合逻辑。
# 自定义函数
def range_func(x):
return x.max() - x.min()
# 应用自定义聚合
result = grouped['Value'].apply(range_func)
print(result)