当前位置: 首页 > news >正文

数据分析Pandas专栏---第十三章<Pandas训练题(初)>

前言:

        写这篇是为了弄一个富有挑战性的Pandas练习题库,涵盖了许多常见和实用的数据处理问题。通过解决这些练习,能够深入了解Pandas提供的关键功能,掌握有效处理数据的技巧和方法。

        练习题库涵盖了选择特定列并创建新DataFrame、对DataFrame进行随机抽样、将字符串列转换为日期时间类型等常见任务。讨论如何根据给定条件进行行的筛选、对字符串列进行大小写转换以及重命名DataFrame的列。此外,还会探索处理缺失数据、重复数据和进行分组计算的方法,以及如何进行数据透视、排序和滑动窗口计算

        实践这些练习,培养自己解决实际数据处理问题的能力,并在日常工作中更加熟练地使用Pandas库。

正文:

---------------------------------------------------难度从低到高------------------------------------------------

题1:

根据给定的DataFrame,选择特定的列,并将其转换为一个新的DataFrame。

案例:

        假设我们有一个DataFrame,其中包含了用户的姓名、年龄、性别以及邮箱地址等信息。我们需要选择其中的姓名和邮箱地址这两列,并将其转换为一个新的DataFrame。

解题思路:

要解决这个问题,我们可以使用Pandas中的索引操作来选择特定的列。首先,我们需要创建一个新的DataFrame对象,并从原始DataFrame中选择所需的列进行复制。

解决方案代码如下:

import pandas as pd# 创建原始DataFrame
data = {'姓名': ['张三', '李四', '王五', '赵六'],'年龄': [25, 30, 35, 40],'性别': ['男', '女', '男', '女'],'邮箱地址': ['zhangsan@gmail.com', 'lisi@gmail.com', 'wangwu@gmail.com', 'zhaoliu@gmail.com']}
df = pd.DataFrame(data)# 选择特定列并创建新的DataFrame
new_df = pd.DataFrame()
new_df['姓名'] = df['姓名']
new_df['邮箱地址'] = df['邮箱地址']# 打印新的DataFrame
print(new_df)

输出结果:

   姓名                邮箱地址
0  张三  zhangsan@gmail.com
1  李四      lisi@gmail.com
2  王五    wangwu@gmail.com
3  赵六   zhaoliu@gmail.com

在这个案例中,我们创建了一个原始的DataFrame,并使用选择特定列的方法将姓名和邮箱地址这两列提取出来,赋值给新的DataFrame对象new_df。最后,我们打印出新的DataFrame,以确认我们成功地选择了所需的列并创建了新的DataFrame。

掌握知识点:

        理解如何根据给定的DataFrame选择特定的列,并将其转换为一个新的DataFrame。这是Pandas中一个常用的基础操作,为处理和分析数据提供了基础。深入思考如何将这个方法应用到实际的数据处理任务中,如特征选择、数据提取等,以更好地利用Pandas的强大功能。

题2:

如何对DataFrame的行进行随机抽样?

案例:

        假设我们有一个包含学生姓名和测试成绩的DataFrame,我们需要对这个DataFrame的行进行随机抽样,选择其中一部分学生进行分析。

解题思路:

要解决这个问题,我们可以使用Pandas中的sample()函数来对DataFrame的行进行随机抽样。我们可以指定抽样的比例或具体的抽样数量,并设置随机种子以保证结果的可重复性。

解决方案代码如下:

import pandas as pd# 创建原始DataFrame
data = {'学生姓名': ['张三', '李四', '王五', '赵六', '小明', '小红'],'测试成绩': [85, 78, 90, 92, 88, 91]}
df = pd.DataFrame(data)# 对DataFrame行进行随机抽样
sample_df = df.sample(frac=0.5, random_state=42)  # 抽取50%的行,设置随机种子为42# 打印抽样结果
print(sample_df)

输出结果:

  学生姓名  测试成绩
1   李四    78
4   小明    88
3   赵六    92

在这个案例中,我们创建了一个原始的DataFrame,并使用sample()函数对DataFrame的行进行随机抽样。通过设置frac参数为0.5,我们抽取了原始DataFrame中50%的行作为抽样结果,并设置了随机种子为42,以保证结果的可重复性。

掌握知识点:

了解如何对DataFrame的行进行随机抽样。这是一个常见的数据处理任务,可以帮助我们在大规模数据集上进行快速的初步分析和检验。可以尝试修改案例中的参数,如抽样比例或抽样数量,进一步了解抽样对结果的影响,并将这个方法应用到实际的数据分析中。

题3:

如何将DataFrame中的字符串列转换为日期时间类型?

案例:

假设我们有一个包含日期和销售额的DataFrame,日期列是以字符串格式表示的。我们需要将这个日期列转换为日期时间类型,以便更方便地进行日期操作和分析。

解题思路:

要解决这个问题,我们可以使用Pandas的to_datetime()函数将字符串列转换为日期时间类型。我们可以指定日期列的格式,并将转换后的结果赋值给原始的日期列。

解决方案代码如下:

import pandas as pd# 创建原始DataFrame
data = {'日期': ['2022-01-01', '2022-02-01', '2022-03-01', '2022-04-01'],'销售额': [1000, 1500, 2000, 1800]}
df = pd.DataFrame(data)# 将字符串列转换为日期时间类型
df['日期'] = pd.to_datetime(df['日期'])# 打印转换后的DataFrame
print(df)

输出结果:

          日期  销售额
0 2022-01-01  1000
1 2022-02-01  1500
2 2022-03-01  2000
3 2022-04-01  1800

在这个案例中,我们创建了一个包含日期和销售额的DataFrame,并使用to_datetime()函数将日期列从字符串格式转换为日期时间类型。我们直接在原始DataFrame上进行操作,将转换后的结果赋值给原始日期列。

掌握知识点:

可以了解如何将DataFrame中的字符串列转换为日期时间类型。这对于处理和分析时间序列数据非常重要,可以进行更精准的日期运算和可视化分析。可以尝试修改案例中的日期格式,并观察结果的变化,以更深入理解日期时间类型的转换。

题4:

给定一个DataFrame和一个条件,如何筛选出满足条件的行?

案例:

假设我们有一个包含学生姓名、年龄和成绩的DataFrame,我们需要根据条件筛选出年龄大于等于18岁的学生。

解题思路:

要解决这个问题,我们可以使用布尔索引(Boolean indexing)来筛选出满足条件的行。首先,我们需要定义条件,然后使用该条件对DataFrame进行布尔索引操作,得到满足条件的行。

解决方案代码如下:

import pandas as pd# 创建原始DataFrame
data = {'姓名': ['张三', '李四', '王五', '赵六'],'年龄': [20, 17, 19, 22],'成绩': [85, 78, 90, 92]}
df = pd.DataFrame(data)# 定义条件并筛选出满足条件的行
condition = df['年龄'] >= 18
filtered_df = df[condition]# 打印筛选结果
print(filtered_df)

输出结果:

   姓名  年龄  成绩
0  张三  20  85
2  王五  19  90
3  赵六  22  92

在这个案例中,我们创建了一个包含学生姓名、年龄和成绩的DataFrame,并定义了筛选的条件,即年龄大于等于18岁。通过使用布尔索引df[condition],我们对DataFrame进行筛选操作,将满足条件的行提取出来并赋值给新的DataFrame对象filtered_df

掌握知识点:

可以了解如何根据给定的条件筛选DataFrame中的行。这是一个常见的数据处理任务,对于数据的筛选和过滤非常有用。可以尝试修改案例中的筛选条件,并观察结果的变化,以更进一步理解布尔索引的使用。

题5:


如何对DataFrame中的字符串列进行大小写转换?

案例:

假设我们有一个包含学生姓名和性别的DataFrame,我们需要将学生姓名的字符串列转换为大写或小写形式,以统一姓名的格式。

解题思路:

要解决这个问题,我们可以使用Pandas的字符串方法对字符串列进行大小写转换。Pandas提供了str.upper()方法将字符串转换为大写形式,以及str.lower()方法将字符串转换为小写形式。我们可以对字符串列应用这些方法,并将转换后的结果赋值给原始的字符串列。

解决方案代码如下:

import pandas as pd# 创建原始DataFrame
data = {'姓名': ['张三', '李四', '王五', '赵六'],'性别': ['male', 'Female', 'female', 'MALE']}
df = pd.DataFrame(data)# 将字符串列转换为大写形式
df['姓名'] = df['姓名'].str.upper()# 将字符串列转换为小写形式
df['性别'] = df['性别'].str.lower()# 打印转换后的DataFrame
print(df)

输出结果:

   姓名      性别
0  张三    male
1  李四  female
2  王五  female
3  赵六    male

在这个案例中,我们创建了一个包含学生姓名和性别的DataFrame,并使用str.upper()方法将姓名列转换为大写形式,使用str.lower()方法将性别列转换为小写形式。

掌握知识点:

可以了解如何对DataFrame中的字符串列进行大小写转换。这对于数据的清洗和统一非常有用,可以消除大小写带来的差异,并提高数据的一致性。可以尝试应用相反的转换方法,如str.lower()str.upper(),并观察结果的变化,以进一步了解字符串转换的效果。

题6:


如何对DataFrame中的列进行重命名?

案例:

假设我们有一个包含学生姓名和年龄的DataFrame,我们需要对这两列进行重命名,将列名从英文改为中文。

解题思路:

要解决这个问题,我们可以使用Pandas的rename()函数对DataFrame的列进行重命名。我们可以通过指定columns参数,传入一个字典,其中键是原始列名,值是新的列名,来对列进行重命名操作。

解决方案代码如下:

import pandas as pd# 创建原始DataFrame
data = {'Name': ['张三', '李四', '王五', '赵六'],'Age': [20, 21, 19, 22]}
df = pd.DataFrame(data)# 对列进行重命名
df = df.rename(columns={'Name': '姓名', 'Age': '年龄'})# 打印重命名后的DataFrame
print(df)

输出结果:

   姓名  年龄
0  张三  20
1  李四  21
2  王五  19
3  赵六  22

在这个案例中,我们创建了一个包含学生姓名和年龄的DataFrame,并使用rename()函数对两列进行重命名。我们通过传入一个字典{'Name': '姓名', 'Age': '年龄'}来指定原始列名和新的列名。

掌握知识点:

可以了解如何对DataFrame中的列进行重命名。这对于数据的清洗和整理非常有用,可以使列名更加有意义和可读性。可以尝试修改案例中的重命名字典,并观察结果的变化,以进一步理解对列进行重命名的操作。

题7:


给定一个DataFrame和一个字符串,如何判断该字符串是否在DataFrame的某一列中存在?

案例:

假设我们有一个包含学生姓名和年龄的DataFrame,我们需要判断某个给定的学生姓名是否存在于DataFrame的姓名列中。

解题思路:

要解决这个问题,我们可以使用Pandas的isin()函数来判断字符串是否存在于某一列中。我们可以将给定的学生姓名转换为一个列表,然后使用isin()函数将这个列表与姓名列进行比较,返回一个布尔序列,表示每个值是否存在于姓名列中。

解决方案代码如下:

import pandas as pd# 创建原始DataFrame
data = {'姓名': ['张三', '李四', '王五', '赵六'],'年龄': [20, 21, 19, 22]}
df = pd.DataFrame(data)# 给定的学生姓名
given_name = '李四'# 判断学生姓名是否存在于姓名列中
name_exists = given_name in df['姓名'].values# 打印判断结果
print(f'学生姓名"{given_name}"存在于姓名列中: {name_exists}')

输出结果:

学生姓名"李四"存在于姓名列中: True

在这个案例中,我们创建了一个包含学生姓名和年龄的DataFrame,并给定了一个学生姓名为'李四'。我们使用in关键字和df['姓名'].values将学生姓名与姓名列进行比较,得到一个布尔值,表示学生姓名是否存在于姓名列中。

掌握知识点:

可以了解如何判断给定的字符串是否存在于DataFrame的某一列中。这在数据查找和匹配方面非常有用,可以帮助我们快速地找到数据中是否存在某个特定的值。可以尝试修改给定的学生姓名,然后观察结果的变化,以进一步了解判断字符串存在性的操作。

相关文章:

数据分析Pandas专栏---第十三章<Pandas训练题(初)>

前言: 写这篇是为了弄一个富有挑战性的Pandas练习题库,涵盖了许多常见和实用的数据处理问题。通过解决这些练习,能够深入了解Pandas提供的关键功能,掌握有效处理数据的技巧和方法。 练习题库涵盖了选择特定列并创建新DataFrame、对DataFrame进…...

Delete `␍`eslint(prettier/prettier) 错误的解决方案

最近开始一个新的项目,由他人构建,clone下来后,发现页面每行都有黄色的波浪线的提示:Delete ␍eslint(prettier/prettier) ,尝试了很多方法不能解决,最后选择关闭Prettier: 在.eslintrc.js文件…...

第3周 Python字典、集合刷题

第3周 Python字典、集合刷题 单击题目,直接跳转到页面刷题,一周后公布答案。 B2125:最高分数的学生姓名28:返回字典的键值75:字符串转字典77:映射字符串中的字母87:按条件过滤字典B3632&#…...

文字校对的首选——爱校对:用户真实反馈汇编

在今日快节奏、高标准的工作环境下,准确与效率成为了每位专业人士追求的双重目标。不论是在政府机构、学术领域、企业界,还是在自由职业者的行列中,我们都面临着同一个挑战:如何在保持工作速度的同时,确保每一份文档的…...

Llama-3即将发布:Meta公布其庞大的AI算力集群

Meta,这家全球科技巨头,再次以其在人工智能(AI)领域的雄心壮志震惊了世界。3月13日,公司在其官方网站上宣布了两个全新的24K H100 GPU集群,这些集群专为训练其大型模型Llama-3而设计,总计拥有高…...

【JAVA】Date、LocalDate、LocalDateTime 详解,实践应用

Date、LocalDate、LocalDateTime 详解,实践应用 一、Date、LocalDate 简介1、 java.util.Date:2、 java.time.LocalDateTime:3、 java.time.LocalDate: 二、输出格式1、使用 java.util.Date 的示例代码如下:2、使用 ja…...

分布式链路追踪(一)SkyWalking(1)介绍与安装

一、介绍 1、简介: 2、组成 以6.5.0为例,该版本下Skywalking主要分为oap、webapp和agent三部分,oap和webapp分别用于汇总数据和展示,这两块共同组成了Skywalking的平台;agent是探针,部署在需要收集数据的…...

蓝桥杯历年真题省赛之 2016年 第七届 生日蜡烛

一、题目 生日蜡烛 某君从某年开始每年都举办一次生日party,并且每次都要吹熄与年龄相同根数的蜡烛。 现在算起来,他一共吹熄了236根蜡烛。 请问,他从多少岁开始过生日party的? 请填写他开始过生日party的年龄数。 注意&…...

SCAU 8580 合并链表

8580 合并链表 时间限制:1000MS 代码长度限制:10KB 提交次数:3724 通过次数:2077 题型: 编程题 语言: G;GCC Description 线性链表的基本操作如下&#xff1a; #include<stdio.h> #include<malloc.h> #define ERROR 0 #define OK 1 #define ElemType inttyped…...

Docker安装Gitlab

下载镜像 直接下载最新版&#xff0c;比较大有2.36G docker pull gitlab/gitlab-ce创建数据存放的目录位置 按自己习惯位置创建目录 mkdir -p /usr/local/docker/docker_gitlab编写docker-compose.yml 在上面创建的挂载目录里面&#xff08;/usr/local/docker/docker_gitl…...

浅淡 C++ 与 C++ 入门

我们知道&#xff0c;C语言是结构化和模块化的语言&#xff0c;适用于较小规模的程序。而当解决复杂问题&#xff0c;需要高度抽象和建模时&#xff0c;C语言则不合适&#xff0c;而C正是在C的基础之上&#xff0c;容纳进去了面向对象编程思想&#xff0c;并增加了许多有用的库…...

学习和认知的四个阶段,以及学习方法分享

本文分享学习的四个不同的阶段&#xff0c;以及分享个人的一些学习方法。 一、学习认知的四个阶段 我们在学习的过程中&#xff0c;总会经历这几个阶段&#xff1a; 第一阶段&#xff1a;不知道自己不知道&#xff1b; 第二阶段&#xff1a;知道自己不知道&#xff1b; 第三…...

Python编程从入门到实践中的一些误区

1.num 使用num时python报错&#xff0c;后来查过后才知道是因为python不支持自增或自减&#xff0c;可以用1。 2.字符串和非字符串连接 要先将非字符串转换为字符串类型之后才能连接 print&#xff08;2int&#xff08;‘2’&#xff09;&#xff09;#4 3.关键字参数必须在未…...

Kanebo HITECLOTH 高科技擦镜布介绍

Kanebo HITECLOTH&#xff0c;这款由日本KBSeiren公司制造的高科技擦镜布&#xff0c;以其卓越的清洁能力和超柔软的布质&#xff0c;成为了市场上备受瞩目的产品。 材质与特性 HITECLOTH采用0.1旦尼尔特级高级微纤维制造&#xff0c;质地细致、坚韧、不起颗粒。这种纤维的特…...

政务云安全风险分析与解决思路探讨

1.1概述 为了掌握某市政务网站的网络安全整体情况&#xff0c;在相关监管机构授权后&#xff0c;我们组织人员抽取了某市78个政务网站进行安全扫描&#xff0c;通过安全扫描&#xff0c;对该市政务网站的整体安全情况进行预估。 1.2工具扫描结果 本次利用漏洞扫描服务VSS共扫…...

Linux tcpdump抓包转Wireshark 分析

简介 tcpdump 是Linux系统下的一个强大的命令&#xff0c;可以将网络中传送的数据包完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤&#xff0c;本文将展示如何使用 tcpdump 抓包&#xff0c;以及如何用 tcpdump 和 wireshark 分析网络流量 tcpdump指…...

【Spring高级】Aware与InitializingBean接口

目录 Aware接口概述为什么需要Aware接口 InitializingBean接口Autoware失效分析 Aware接口 概述 在Spring框架中&#xff0c;Aware 接口是一种常用的设计模式&#xff0c;用于允许bean在初始化时感知&#xff08;或获取&#xff09;Spring容器中的某些资源或环境信息。这些接…...

打造你的HTML5打地鼠游戏:零基础入门教程

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…...

C++默认构造函数/拷贝构造函数/赋值构造函数

概述 本文主要讲解C默认构造函数&#xff0c;拷贝构造函数和赋值构造函数在哪些场景下会被调用到 代码 类定义 class A{public:A() { cout<<"construct function"<<endl; }A(const A& other) { cout<<"copy construct function"…...

前端框架的发展历史介绍

前端框架的发展历史是Web技术进步的一个重要方面。从最初的简单HTML页面到现在的复杂单页应用程序&#xff08;SPA&#xff09;&#xff0c;前端框架和库的发展极大地推动了Web应用程序的构建方式。以下是一些关键的前端框架和库&#xff0c;以及它们的发布年份、创建者和主要特…...

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python&#xff5c;GIF 解析与构建&#xff08;5&#xff09;&#xff1a;手搓截屏和帧率控制 一、引言 二、技术实现&#xff1a;手搓截屏模块 2.1 核心原理 2.2 代码解析&#xff1a;ScreenshotData类 2.2.1 截图函数&#xff1a;capture_screen 三、技术实现&…...

Pinocchio 库详解及其在足式机器人上的应用

Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库&#xff0c;专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性&#xff0c;并提供了一个通用的框架&…...

Xen Server服务器释放磁盘空间

disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...

Linux离线(zip方式)安装docker

目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1&#xff1a;修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本&#xff1a;CentOS 7 64位 内核版本&#xff1a;3.10.0 相关命令&#xff1a; uname -rcat /etc/os-rele…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.

ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #&#xff1a…...

深入理解Optional:处理空指针异常

1. 使用Optional处理可能为空的集合 在Java开发中&#xff0c;集合判空是一个常见但容易出错的场景。传统方式虽然可行&#xff0c;但存在一些潜在问题&#xff1a; // 传统判空方式 if (!CollectionUtils.isEmpty(userInfoList)) {for (UserInfo userInfo : userInfoList) {…...

Python 训练营打卡 Day 47

注意力热力图可视化 在day 46代码的基础上&#xff0c;对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...

向量几何的二元性:叉乘模长与内积投影的深层联系

在数学与物理的空间世界中&#xff0c;向量运算构成了理解几何结构的基石。叉乘&#xff08;外积&#xff09;与点积&#xff08;内积&#xff09;作为向量代数的两大支柱&#xff0c;表面上呈现出截然不同的几何意义与代数形式&#xff0c;却在深层次上揭示了向量间相互作用的…...

基于 HTTP 的单向流式通信协议SSE详解

SSE&#xff08;Server-Sent Events&#xff09;详解 &#x1f9e0; 什么是 SSE&#xff1f; SSE&#xff08;Server-Sent Events&#xff09; 是 HTML5 标准中定义的一种通信机制&#xff0c;它允许服务器主动将事件推送给客户端&#xff08;浏览器&#xff09;。与传统的 H…...