【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 列分组,并计算每个名字的 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')

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

相关推荐
fbincon26 分钟前
Claude Code 自定义状态栏工具:安装、配置与 Subagent 状态展示
python·typescript·claude·claude-code·statusline
yunfengzhineng32 分钟前
天津立体库货架配套厂家
大数据·运维·人工智能·python
m0_674571971 小时前
力扣 hot 100 python
python·算法·leetcode
小白快快跑哦1 小时前
python-字符串全解(六):正则表达式-元字符与转义
python·正则表达式·字符串·元字符·转义
Want5952 小时前
Python炫酷烟花①
开发语言·python
青少儿编程课堂2 小时前
蓝桥杯+全国青少年信息素养大赛+电子学会PythonC/C++考级:最长公共子序列LCS解析
c++·python·算法·bfs·信息学竞赛
Y3815326622 小时前
印度电商数据采集教程:用 SerpBase 查 Flipkart/Myntra/Ajio 商品(附代码)
数据库·python
阿维的博客日记2 小时前
大白话解析快排Python
python
roman_日积跬步-终至千里3 小时前
【数据Agent论文·查询与语义|06】RAT-SQL:怎样把问题、表和字段真正关联起来?
数据库·sql·数据分析
doujiaozh3 小时前
我在 DOS 6.22 上跑通了 Kimi AI:一场跨越 40 年的硬核接力
python