Python 基础入门 Day21

欢迎来到 Python 基础入门 Day21!在前两天的课程中,我们学习了 Pandas 的基础操作和分组聚合技巧。今天,我们将进一步探讨 Pandas 的高级功能,包括 数据透视表多索引操作数据合并与连接。这些技能在实际数据分析中非常重要,能够帮助你处理更复杂的结构化数据。


目录

  1. 数据透视表(Pivot Table)
  2. 多索引与层级索引操作
  3. 数据合并与连接
  4. 小结与练习

一、数据透视表(Pivot Table)

数据透视表是一种强大的工具,可以快速对数据进行分组、聚合和总结。它类似于 Excel 中的透视表。

1.1 创建透视表

使用 Pandas 的 pivot_table() 方法可以创建数据透视表。

import pandas as pd # 示例数据 data = { "Region": ["North", "North", "South", "South", "East", "East"], "Product": ["A", "B", "A", "B", "A", "B"], "Sales": [200, 150, 300, 400, 250, 100], "Profit": [20, 15, 30, 40, 25, 10], } df = pd.DataFrame(data) # 创建透视表:按地区和产品计算销售额的总和 pivot = pd.pivot_table(df, values="Sales", index="Region", columns="Product", aggfunc="sum", fill_value=0) print(pivot)

输出:

Product A B Region East 250 100 North 200 150 South 300 400

1.2 添加多个聚合函数

你可以同时对多个列应用不同的聚合函数。

# 透视表:同时计算销售额和利润的总和与平均值 pivot = pd.pivot_table( df, values=["Sales", "Profit"], index="Region", aggfunc={"Sales": ["sum", "mean"], "Profit": ["sum", "mean"]} ) print(pivot)


二、多索引与层级索引操作

2.1 创建多索引

多索引(MultiIndex)是 Pandas 的一大特色,可以帮助我们对数据进行多维度的索引和操作。

# 创建多索引 DataFrame df_multi = df.set_index(["Region", "Product"]) print(df_multi)

输出:

Sales Profit Region Product North A 200 20 B 150 15 South A 300 30 B 400 40 East A 250 25 B 100 10

2.2 索引操作

  • 重置索引:将多索引还原为普通列。

# 重置索引 df_reset = df_multi.reset_index() print(df_reset)

  • 交换索引顺序:调整多索引的顺序。

# 交换索引顺序 df_swapped = df_multi.swaplevel() print(df_swapped)

  • 排序索引:根据索引顺序排序。

# 按索引排序 df_sorted = df_multi.sort_index(level=0) print(df_sorted)


三、数据合并与连接

Pandas 提供了多种方式将不同的数据集合并到一起,比如 mergeconcatjoin

3.1 使用 merge 合并数据

merge() 类似于 SQL 的 JOIN 操作,可以根据一个或多个键将两个表合并。

# 示例数据 df1 = pd.DataFrame({"ID": [1, 2, 3], "Name": ["Alice", "Bob", "Charlie"]}) df2 = pd.DataFrame({"ID": [1, 2, 4], "Salary": [5000, 6000, 7000]}) # 合并数据 merged = pd.merge(df1, df2, on="ID", how="inner") print(merged)

输出:

ID Name Salary 0 1 Alice 5000 1 2 Bob 6000

支持多种连接方式:

  • how="inner":默认值,只保留两表中共有的行。
  • how="left":保留左表的所有行。
  • how="right":保留右表的所有行。
  • how="outer":保留所有行,缺失值填充为 NaN。

3.2 使用 concat 拼接数据

concat() 按行或列拼接数据。

# 示例数据 df3 = pd.DataFrame({"Name": ["David", "Eve"], "Age": [30, 25]}) # 按行拼接 concatenated = pd.concat([df1, df3], ignore_index=True) print(concatenated)

输出:

ID Name Age 0 1.0 Alice NaN 1 2.0 Bob NaN 2 3.0 Charlie NaN 3 NaN David 30.0 4 NaN Eve 25.0


3.3 使用 join 合并索引匹配的数据

join() 方法适用于索引对齐的合并操作。

# 示例数据 df4 = df1.set_index("ID") df5 = df2.set_index("ID") # 按索引合并 joined = df4.join(df5, how="inner") print(joined)


四、小结与练习

今天,我们学习了 Pandas 的高级操作,包括:

  • 数据透视表:快速对数据进行分组和聚合。
  • 多索引:对复杂的层级数据进行灵活操作。
  • 数据合并与连接:灵活地整合多个数据集。

今日练习题:

  1. 创建一个包含以下列的 DataFrame:
    • City(城市名称)。
    • Month(月份)。
    • Temperature(温度)。
    • Rainfall(降水量)。
  2. 使用数据透视表,按城市和月份计算平均温度和降水量。
  3. 将一个包含 PM2.5 数据的 DataFrame 与上述 DataFrame 合并,并生成一个新的 DataFrame。
  4. 将合并后的数据转换为多索引格式,并按城市进行排序。

下一节预告:在 Day22 中,我们将学习 Pandas 的 时间序列操作,包括如何处理时间数据和进行时间序列分析。敬请期待!


希望你今天的学习愉快!如果有任何问题,随时讨论 😊。

Comments

No comments yet. Why don’t you start the discussion?

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注