Python 基础入门 Day21

51次阅读
没有评论

共计 2461 个字符,预计需要花费 7 分钟才能阅读完成。

欢迎来到 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 的 时间序列操作,包括如何处理时间数据和进行时间序列分析。敬请期待!


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

正文完
 0
评论(没有评论)