当前位置: 首页 > 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;以及它们的发布年份、创建者和主要特…...

JSON 格式:执行式AI数据交互核心语法

JSON 格式&#xff1a;执行式AI数据交互核心语法&#x1f4dd; 本章学习目标&#xff1a;本章是入门认知部分&#xff0c;帮助零基础读者建立对AI Agent的初步认知。通过本章学习&#xff0c;你将全面掌握"JSON 格式&#xff1a;执行式AI数据交互核心语法"这一核心主…...

3分钟掌握B站无损音频下载:BilibiliDown新手必看指南

3分钟掌握B站无损音频下载&#xff1a;BilibiliDown新手必看指南 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader &#x1f633; 项目地址: https://gitcode.com/gh_mirrors/bi…...

AI Agent的隐私保护设计:合规前提下的用户数据使用策略

AI Agent的隐私保护设计&#xff1a;合规前提下的用户数据使用策略引言 各位技术同行、AI应用开发者、产品经理以及对用户数据与智能交互边界敏感的读者朋友们&#xff0c;大家好&#xff01;我是深耕AI工程化落地与数据治理领域8年的技术博主「码海拾遗」。在过去的3年里&…...

【摄影测量】从零实现张正友标定法:手写代码解析相机内参/外参与畸变校正

1. 从棋盘格到数学模型&#xff1a;张正友标定法基础 第一次接触相机标定时&#xff0c;我被那些复杂的数学符号吓到了。直到自己动手实现了一遍张正友标定法&#xff0c;才发现它的精妙之处其实非常直观。想象你手里拿着一个国际象棋棋盘&#xff0c;用手机从不同角度拍摄它—…...

Z-Image-Turbo-辉夜巫女应用:快速生成动漫角色,打造个人风格画师

Z-Image-Turbo-辉夜巫女应用&#xff1a;快速生成动漫角色&#xff0c;打造个人风格画师 1. 项目介绍与核心功能 1.1 什么是Z-Image-Turbo-辉夜巫女&#xff1f; Z-Image-Turbo-辉夜巫女是一款基于阿里巴巴通义实验室Z-Image-Turbo模型的图像生成工具&#xff0c;专门针对动…...

KawaiiPhysics动画通知实战:AnimNotifyState与AnimNotify的完整应用指南

KawaiiPhysics动画通知实战&#xff1a;AnimNotifyState与AnimNotify的完整应用指南 【免费下载链接】KawaiiPhysics KawaiiPhysics : Simple Bone Physics for UnrealEngine 4 & 5 项目地址: https://gitcode.com/gh_mirrors/ka/KawaiiPhysics 在Unreal Engine开发…...

新手福音:用claude code和快马平台开启你的Python编程第一课

最近在帮朋友入门Python编程时&#xff0c;发现很多新手都会遇到类似的问题&#xff1a;看教程时觉得简单&#xff0c;但自己动手写代码就无从下手。经过几次尝试&#xff0c;我发现用InsCode(快马)平台结合claude code生成的教学项目&#xff0c;能很好地解决这个痛点。下面分…...

掌握微信小程序逆向分析的3个关键:wxappUnpacker深度解析与实战指南

掌握微信小程序逆向分析的3个关键&#xff1a;wxappUnpacker深度解析与实战指南 【免费下载链接】wxappUnpacker 项目地址: https://gitcode.com/gh_mirrors/wxappu/wxappUnpacker 在微信小程序开发与学习过程中&#xff0c;开发者常常需要深入理解优秀小程序的实现原理…...

CVPR2025 | 对抗样本攻防前沿:从基础理论到多模态安全新挑战

1. 对抗样本攻防基础理论演进 对抗样本研究最早可以追溯到2013年Szegedy等人的开创性工作&#xff0c;他们发现通过在图像中添加人眼难以察觉的扰动&#xff0c;就能使深度神经网络产生错误分类。这个发现揭示了机器学习模型在输入空间中的脆弱性&#xff0c;也开启了对抗样本研…...

阶跃星辰 GUI-MCP 解读---(2)---决策层

本文是第二篇&#xff0c;主要是介绍决策层&#xff0c;本层在任何情况下&#xff08;是/非MCP&#xff09;都会用到。因为是反推解读&#xff0c;而且时间有限&#xff0c;所以可能会有各种错误&#xff0c;还请大家不吝指出。0x01 LocalServerLocalServer 是本地 GUI Agent 服…...