百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分类 > 正文

Pandas 入门教程 - 第五课: 高级数据操作

ztj100 2025-06-04 08:56 19 浏览 0 评论


在前几节课中,我们学习了如何使用 Pandas 进行数据操作和可视化。在这一课中,我们将进一步探索一些高级的数据操作技巧,包括数据透视、分组聚合、时间序列处理以及高级索引和切片。

高级索引和切片

高级索引

Pandas 提供了强大的索引功能,可以让我们轻松地访问和操作数据。

布尔索引

import pandas as pd

# 创建一个简单的 DataFrame
df = pd.DataFrame({
    'Name': ['Alice', 'Bob', 'Charlie', 'David'],
    'Age': [25, 30, 35, 40],
    'City': ['New York', 'Los Angeles', 'Chicago', 'Houston']
})

# 使用布尔索引选择年龄大于 30 的人
filtered_df = df[df['Age'] > 30]
print(filtered_df)
      Name  Age     City
2  Charlie   35  Chicago
3    David   40  Houston

切片和切片

# 使用切片选择特定范围的行和列
subset_df = df[1:3, 0:2]  # 选择第 2 行到第 3 行,第 1 列到第 2 列
print(subset_df)

位置索引

# 使用位置索引选择特定行和列
row_at_index_2 = df.iloc[1]  # 选择第 2 行
print(row_at_index_2)

column_at_index_1 = df.iloc[:, 0]  # 选择第 1 列
print(column_at_index_1)
Name            Bob
Age              30
City    Los Angeles
Name: 1, dtype: object
0      Alice
1        Bob
2    Charlie
3      David
Name: Name, dtype: object

标签索引

# 使用标签索引选择特定行和列
row_at_label_Bob = df.loc[df['Name'] == 'Bob']  # 选择 'Name' 为 'Bob' 的行
print(row_at_label_Bob)

column_at_label_Age = df.loc[:, 'Age']  # 选择 'Age' 列
print(column_at_label_Age)
  Name  Age         City
1  Bob   30  Los Angeles
0    25
1    30
2    35
3    40
Name: Age, dtype: int64

高级切片

Pandas 还支持更复杂的切片操作,如基于条件的切片。

基于条件的切片

# 使用条件表达式进行切片
filtered_df = df[(df['Age'] > 25) & (df['City'] == 'Chicago')]
print(filtered_df)
      Name  Age     City
2  Charlie   35  Chicago

分组聚合

分组聚合

Pandas 的 groupby() 方法允许我们对数据集进行分组,并对每个组进行聚合操作。

聚合函数

import pandas as pd

# 创建一个简单的 DataFrame
df = pd.DataFrame({
    'Category': ['A', 'A', 'B', 'B', 'C'],
    'Value': [10, 20, 30, 40, 50]
})

# 使用 groupby() 方法按 'Category' 列分组,并计算每个组的平均值
grouped_df = df.groupby('Category').mean()
print(grouped_df)
          Value
Category       
A          15.0
B          35.0
C          50.0

自定义聚合函数

# 定义一个自定义聚合函数
def custom_aggregate(values):
    return sum(values) / len(values)

# 使用 groupby() 方法按 'Category' 列分组,并使用自定义聚合函数
grouped_df_custom = df.groupby('Category').agg(custom_aggregate)
print(grouped_df_custom)
          Value
Category       
A          15.0
B          35.0
C          50.0

时间序列处理

时间序列数据处理

Pandas 提供了强大的时间序列处理功能,可以处理日期和时间数据。

创建时间序列

import pandas as pd

# 创建一个日期范围
dates = pd.date_range('2020-01-01', periods=100)

# 创建一个时间序列 DataFrame
ts_df = pd.DataFrame({
    'Date': dates,
    'Value': np.random.randn(100)
})

print(ts_df)
         Date     Value
0  2020-01-01  2.032894
1  2020-01-02 -1.208483
2  2020-01-03 -0.532763
3  2020-01-04  2.169684
4  2020-01-05  0.580246
..        ...       ...
95 2020-04-05  0.254223
96 2020-04-06  0.461171
97 2020-04-07  0.282761
98 2020-04-08  0.091264
99 2020-04-09  0.464295

[100 rows x 2 columns]

时间序列操作

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# 创建一个日期范围
dates = pd.date_range('2020-01-01', periods=100)

# 创建一个时间序列 DataFrame,并将日期设置为索引
ts_df = pd.DataFrame({
    'Value': np.random.randn(100)
}, index=dates)

# 确保 'Value' 列是数值类型
ts_df['Value'] = ts_df['Value'].astype(float)

# 时间序列频率转换
ts_df_quarterly = ts_df.resample('Q').mean()  # 转换为季度数据
ts_df_monthly = ts_df.resample('M').sum()  # 转换为月度数据

# 移动平均
ma_20 = ts_df['Value'].rolling(window=20).mean()

# 绘制时间序列图
plt.figure(figsize=(12, 6))
plt.subplot(2, 1, 1)
plt.plot(ts_df.index, ts_df['Value'], label='Original Data')
plt.legend()

plt.subplot(2, 1, 2)
plt.plot(ma_20.index, ma_20, label='Moving Average (20 days)', color='red')
plt.legend()
plt.show()



练习题

  1. 使用 Pandas 创建一个包含日期和温度的 DataFrame,并将其转换为时间序列对象。
  2. 如何使用 Pandas 进行日期和时间的格式化和解析

相关推荐

这个 JavaScript Api 已被废弃!请慎用!

在开发过程中,我们可能会不自觉地使用一些已经被标记为废弃的JavaScriptAPI。这些...

JavaScript中10个“过时”的API,你的代码里还在用吗?

JavaScript作为一门不断发展的语言,其API也在持续进化。新的、更安全、更高效的API不断涌现,而一些旧的API则因为各种原因(如安全问题、性能瓶颈、设计缺陷或有了更好的替代品)被标记为“废...

几大开源免费的 JavaScript 富文本编辑器测评

MarkDown编辑器用的时间长了,发现发现富文本编辑器用起来是真的舒服。...

比较好的网页里面的 html 编辑器 推荐

如果您正在寻找嵌入到网页中的HTML编辑器,以便用户可以直接在网页上编辑HTML内容,以下是几个备受推荐的:CKEditor:CKEditor是一个功能强大的、开源的富文本编辑器,可以嵌入到...

Luckysheet 实现excel多人在线协同编辑

前言前些天看到Luckysheet支持协同编辑Excel,正符合我们协同项目的一部分,故而想进一步完善协同文章,但是遇到了一下困难,特此做声明哈,若侵权,请联系我删除文章!若侵犯版权、个人隐私,请联系...

从 Element UI 源码的构建流程来看前端 UI 库设计

作者:前端森林转发链接:https://mp.weixin.qq.com/s/ziDMLDJcvx07aM6xoEyWHQ引言...

手把手教你如何用 Decorator 装饰你的 Typescript?「实践」

作者:Nealyang转发连接:https://mp.weixin.qq.com/s/PFgc8xD7gT40-9qXNTpk7A...

推荐五个优秀的富文本编辑器

富文本编辑器是一种可嵌入浏览器网页中,所见即所得的文本编辑器。对于许多从事前端开发的小伙伴来说并不算陌生,它的应用场景非常广泛,平时发个评论、写篇博客文章等都能见到它的身影。...

基于vue + element的后台管理系统解决方案

作者:林鑫转发链接:https://github.com/lin-xin前言该方案作为一套多功能的后台框架模板,适用于绝大部分的后台管理系统(WebManagementSystem)开发。基于v...

开源富文本编辑器Quill 2.0重磅发布

开源富文本编辑器Quill正式发布2.0版本。官方TypeScript声明...

Python之Web开发框架学习 Django-表单处理

在Django中创建表单实际上类似于创建模型。同样,我们只需要从Django类继承,则类属性将是表单字段。让我们在myapp文件夹中添加一个forms.py文件以包含我们的应用程序表单。我们将创建一个...

Django测试入门:打造坚实代码基础的钥匙

这一篇说一下django框架的自动化测试,...

Django ORM vs SQLAlchemy:到底谁更香?从入门到上头的选择指南

阅读文章前辛苦您点下“关注”,方便讨论和分享,为了回馈您的支持,我将每日更新优质内容。...

超详细的Django 框架介绍,它来了!

时光荏苒,一晃小编的Tornado框架系列也结束了。这个框架虽然没有之前的FastAPI高流量,但是,它也是小编的心血呀。总共16篇博文,从入门到进阶,包含了框架的方方面面。虽然小编有些方面介绍得不是...

20《Nginx 入门教程》使用 Nginx 部署 Python 项目

今天的目标是完成一个PythonWeb项目的线上部署,我们使用最新的Django项目搭建一个简易的Web工程,然后基于Nginx服务部署该PythonWeb项目。1.前期准备...

取消回复欢迎 发表评论: