Pandas-5:数据分析与统计

时间:2024-11-20 12:18:11

本章将深入讲解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)