【Python】Pandas:数据分析

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 列分组,并计算每个名字的 AgeScore 的平均值。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')

这种柱状图适合用于对比不同类别或时间段内的数值,便于快速了解各类数据之间的差异。

相关推荐
程序员爱钓鱼1 小时前
Python编程实战:面向对象与进阶语法——上下文管理器(with语句)
后端·python·ipython
程序员爱钓鱼1 小时前
Python编程实战:面向对象与进阶语法——装饰器(Decorator)
后端·python·ipython
JELEE.4 小时前
Django登录注册完整代码(图片、邮箱验证、加密)
前端·javascript·后端·python·django·bootstrap·jquery
孫治AllenSun5 小时前
【算法】图相关算法和递归
windows·python·算法
读研的武8 小时前
DashGo零基础入门 纯Python的管理系统搭建
开发语言·python
Andy8 小时前
Python基础语法4
开发语言·python
mm-q29152227299 小时前
Python+Requests零基础系统掌握接口自动化测试
开发语言·python
电院工程师10 小时前
SIMON64/128算法Verilog流水线实现(附Python实现)
python·嵌入式硬件·算法·密码学
Python图像识别12 小时前
75_基于深度学习的咖啡叶片病害检测系统(yolo11、yolov8、yolov5+UI界面+Python项目源码+模型+标注好的数据集)
python·深度学习·yolo