【Python】统计列表出现某个数字/字段的次数+去除列表的nan值+计算列表中的正负值百分比和绝对值

news2024/9/24 23:26:09

1. 统计一个列表出现某个数字或者字段的次数

A. 列表推导式法

原理:使用列表推导式找出所有等于0的元素,并用sum()函数计算它们的数量。

这个方法的优点是:可以筛选等于和不等于的,用来统计占比。如果需要筛选的是字符串,也可以把 if sum ==0,的部分改为字符串就好了。

例如,这个需要从列表中筛选出数值为0的个数,结果是出现3次:

numbers = [0, 1, 2, 0, 3, 0, 4]

#查询等于0的数量
count_zero = sum(1 for num in numbers if num == 0)
non_count_zero_=sum(1 for num in numbers if num != 0)
print(count_zero)  
# 输出结果是 3

这个写法思路比较清晰,我们可以看到生成式筛选出对应的条件然后用sum进行数量加总,如果sum的括号后面没有1,则是计算出列表的数值的总和。同时,这个方法也能适用于筛选字符串。

B.collections.Counter

这个方法适用于当你需要统计集合中所有元素出现次数的情况

 from collections import Counter

# 假设我们有一个数字列表
numbers = [0, 1, 2, 0, 3, 0, 4]

# 使用Counter计算每个元素的出现次数
counter = Counter(numbers)

# 直接获取0出现的次数
count_zero = counter[3]

print(count_zero)  # 输出结果将是3

2. 去除列表的nan,做数值统计

当然如果里面混有nan,例如这样的结构的:

[nan, '-20', nan,'-50', nan, nan, '-20', '50', '-100']

如果我们想去掉nan,统计非nan值的方法:

A.使用列表生成式的方法(里面是数值型):

import math
my_list = [1.0, float('nan'), 2.0, 3.0, float('nan'), 4.0]
cleaned_list = [x for x in my_list if not math.isnan(x)]
print(cleaned_list )
#[1.0, 2.0, 3.0, 4.0]

B.使用filter()函数和math.isnan()去除(里面是数值型):

import math
my_list = [1.0, float('nan'), 2.0, 3.0, float('nan'), 4.0]
cleaned_list = list(filter(lambda x: not math.isnan(x), my_list))
print(cleaned_list )
#[1.0, 2.0, 3.0, 4.0]

c. 在含字符串的列表中去除NaN:

上面的方法是在数值型的数据中筛选出NaN,如果是列表中有字符串,可以使用下面的方法:

import math
my_list = [1.0, 'a', float('nan'), 2.0, 'b', 3.0, float('nan'), 'c', 4.0]
cleaned_list = [x for x in my_list if not (isinstance(x, float) and math.isnan(x))]
print(cleaned_list )
#[1.0, 'a', 2.0, 'b', 3.0, 'c', 4.0]

这个方法使用了isinstance(x, float) 来检查元素是否为浮点数。如果是浮点数,再使用math.isnan(x)检查是否为NaN。

3. 区分列表的正数和负数,并算出正数和负数所占百分比

如果需要做分类,首先需要判断列表里面的数值是不是都是浮点数,如果是字符串,需要全部转化为浮点数

步骤一. 将列表的字符串数字转为浮点数

#使用map()函数
numbers = ["1.5", "-2.3", "0", "3.7", "-4.1", "5.0", "-6.2", "0.0"]
float_list = list(map(float, numbers ))

步骤二. 列表数值的正负值分类

如果我们有一个包含浮点数的列表,可以使用两个列表推导式来分别选出正数和负数:

numbers = [1.5, -2.3, 0, 3.7, -4.1, 5.0, -6.2, 0.0]

positive_numbers = [num for num in numbers if num > 0]
negative_numbers = [num for num in numbers if num < 0]
zero_values = [num for num in numbers if num == 0]

print("Positive numbers:", positive_numbers) #
print("Negative numbers:", negative_numbers) #
print("Zero values:", zero_values) #

#Positive numbers: [1.5, 3.7, 5.0]
#Negative numbers: [-2.3, -4.1, -6.2]
#Zero values: [0, 0.0]

步骤三. 计算所占百分比

如果要计算三者的占比,则三者除以总数就可以啦!

#分别查询这三者的个数
positive_count = len(positive_numbers) #负数的数量
negative_count = len(negative_numbers) #正数的数量
zero_count = len(zero_values) #0的数量
print('正数的数量是:',positive_count)
print('负数的数量是:',negative_count)
print('0的数量是:',zero_count)
#正数的数量是: 3
#负数的数量是: 3
#0的数量是: 2

#计算总数
sum_count=len(numbers ) 

#计算占比
Positive_ratio=positive_count /sum_count
Negative_ratio=negative_count/sum_count
zero_ratio=zero_count/sum_count

print('价格上涨所占百分比:',Positive_ratio)
print('价格下跌所占百分比:',Negative_ratio)
print('价格不变所占百分比:',zero_ratio)

结果:
价格上涨所占百分比: 0.375
价格下跌所占百分比: 0.375
价格不变所占百分比: 0.25

如果需要把小数换算成百分比,则使用:

#构建一个百分比换算函数
def fraction_to_percentage(numerator, denominator):
     percentage=(numerator / denominator) * 100      
     return f"{percentage}%" #返回字符串格式
     
Positive_ratio=fraction_to_percentage(positive_count ,sum_count)
Negative_ratio=fraction_to_percentage(negative_count,sum_count)
zero_ratio=fraction_to_percentage(zero_count,sum_count)
print('价格上涨所占百分比:',Positive_ratio)
print('价格下跌所占百分比:',Negative_ratio)
print('价格不变所占百分比:',zero_ratio)

结果:
价格上涨所占百分比: 37.5%
价格下跌所占百分比: 37.5%
价格不变所占百分比: 25.0%

4. 筛选出列表中最大的绝对值和最小的绝对值

思路:
首先使用列表推导式计算列表中每个元素的绝对值,
然后使用max()min()函数分别找出这些绝对值中的最大值和最小值。

numbers = [1.5, -2.3, 0, 3.7, -4.1, 5.0, -6.2, 0.0]

# 计算绝对值并找出最大和最小的绝对值
abs_values = [abs(num) for num in numbers]
max_abs_value = max(abs_values)
min_abs_value = min(abs_values)

print("列表:", numbers)
print("最大绝对值:", max_abs_value)
print("最小绝对值:", min_abs_value)

结果:
列表: [1.5, -2.3, 0, 3.7, -4.1, 5.0, -6.2, 0.0]
最大绝对值: 6.2
最小绝对值: 0

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【AQS源码】深入理解AQS的工作原理

【AQS源码】深入理解AQS的工作原理-CSDN博客

XXL-JOB分布式任务调度教程(持续更新~)

先大致声明一下流程&#xff08;具体细节在下面哦~&#xff09; 步骤&#xff1a; 1.下载xxl-job并配置以及启动 2.导入对应maven坐标 3.配置对应的配置文件以及编写对应的配置类config 4.编写要触发的方法并且给方法打上XXlJob("")注解 5.设置xxl-Job平台上的任务 …

环球佳酿:如何利用CRM系统实现营销管理数字化转型

在科技迅猛发展的今天&#xff0c;传统行业正在以空前的速度与数字技术相融合。面对从增量扩张转向存量竞争的白酒产业&#xff0c;培育新质生产力、推进数字化与智能化转型已成为业界的普遍共识。众多白酒企业纷纷探索数字化转型之路&#xff0c;力图通过创新和突破来提升竞争…

火狐浏览器设置秘籍:让https协议下的ws不加密时运行无阻(WebSocket connection HTTPS)

Uncaught (in promise) DOMException: Failed to construct ‘WebSocket’: An insecure WebSocket connection may not be initiated from a page loaded over HTTPS. 明确指出了一个常见的安全限制&#xff1a;当尝试从一个通过HTTPS加载的页面上发起一个不安全的&#xff08…

零基础国产GD32单片机编程入门(十三)单片机IAP(在应用编程)详解及实战源码

文章目录 一.概要二.GD32F103C8T6单片机IAP介绍1.GD32F103C8T6单片机IAP基本原理2.GD32F103C8T6单片机IAP基本流程 三.配置一个BOOT工程四.配置一个APP工程五.工程源代码下载六.小结 一.概要 GD32单片机程序升级方法有很多种&#xff0c;主要有以下几种&#xff1a; 1.将编译…

【unity知识】Animator动画状态的基本属性介绍

文章目录 动画状态的基本属性1、标签Tag2、Motion 该状态所管理的动画片段3、speed 动画的播放速度4、Motion Time 播放动画片段定在一个特定时间点5、Mirror镜像动画6、CycleOffset动画偏移7、FootIK8、Write Defaults 参考完结 动画状态的基本属性 1、标签Tag 通过打标签我们…

NIO笔记04-网络编程

文章目录 1 非阻塞 vs 阻塞 ★★★阻塞非阻塞多路复用 2 Selector创建绑定 Channel 事件监听 Channel 事件&#x1f4a1; select 何时不阻塞 3 处理 accept 事件&#x1f4a1; 事件发生后能否不处理 4 处理 read 事件处理添加区分事件类型&#xff0c;客户端发送数据时会报空指…

基于TCP的web端服务器数据库查询商品

背景描述 该系统为创建网络并发服务器&#xff0c;搭建HTML网络页面框架&#xff0c;通过HTTP超文本网络传输与用户建立连接&#xff08;TCP建立连接&#xff09;&#xff0c;从自己建立的数据库中查询用户所需信息&#xff0c;使用户能在网页中直接查询相关内容。本系统包括…

Elasticsearch设置密码报错:ERROR: X-Pack Security is disabled by configuration.

elasticsearch@6ef6c3f5ee45:~$ bin/elasticsearch-setup-passwords auto Unexpected response code [405] from calling GET http://172.17.0.2:9200/_security/_authenticate?pretty It doesn’t look like the X-Pack security feature is enabled on this Elasticsearch n…

Meshy-4:AI驱动3D建模的革命性工具,解锁虚拟创作新高度

Meshy发布了最新的AI驱动3D建模工具——Meshy-4&#xff0c;这是虚拟环境创作领域的一大进步。对设计师和开发者来说&#xff0c;Meshy-4的出现不仅是技术上的飞跃&#xff0c;更是创作效率的极大提升。 Meshy-4的亮点与功能 1. 更清晰、更专业的AI生成3D模型&#xff1a; Mes…

沉浸式体验:ARM 工控机携手 HT for Web 打造智能建筑监控

工业领域技术的进步不断推动着生产和管理方式的革新。随着物联网、大数据、云计算等技术的发展&#xff0c;工业自动化和信息化融合的趋势日益明显。在这样的背景下&#xff0c;HT for Web 和 ARM 工业计算机成为了工业智能化道路上的重要工具。 HT for Web 是一款基于WebGL的高…

2024国赛数学建模备赛|30种常用的算法模型之最优算法,线性规划

1.最优化理论基础 1.1 最优化问题的数学模型 通俗地说&#xff0c;所谓最优化问题&#xff0c;就是求一个多元函数在某个给定集合上的极 值. 几乎所有类型的最优化问题都可以用下面的数学模型来描述: 这里&#xff0c;&#x1d43e; 是某个给定的集合 (称为可行集或可行域)&a…

ffmpeg 视频编码及基本知识

理论 H264编码原理&#xff08;简略&#xff09; 1. 视频为什么需要进行编码压缩 降低视频数据大小&#xff0c;方便存储和传输 2. 为什么压缩的原始数据采用YUV格式 彩色图像的格式是 RGB 的&#xff0c;但RGB 三个颜色是有相关性的。 采用YUV格式&#xff0c;利用人对图像的…

LoRa芯片在RX时产生的中断顺序QA

目录 1 前言2 问题集锦及解答2.1 radio芯片在接包时&#xff0c;preamble、header和Rx done三个中断产生顺序是怎么样的&#xff1f;谁先谁后&#xff1f;2.2 产生了Header error中断后&#xff0c;radio芯片会继续接收本包还是立马丢弃本包&#xff1f;2.3 产生了CRC error中断…

语言中的类型转换

编程语言中必然有很多情况需要转换类型。比如引入const的概念就为了提高安全性&#xff0c;编译器提前检查&#xff0c;避免一些意外修改。当然&#xff0c;有时&#xff0c;我们希望手动转换一个变量的类型&#xff0c;让其变成常量&#xff0c;可以利用编译器提供的cast方法。…

保隆科技半年报:净利同比下滑近两成,ADAS/空悬业务仍亏损

2024年上半年&#xff0c;在全球产业链调整、局部战争仍未平息等事件长期影响下&#xff0c;叠加主要经济体货币政策调整、债务风险上升等周期性因素&#xff0c;全球经济复苏面临较大不确定性&#xff0c;汽车市场尚处在缓慢恢复阶段。 这也导致不少汽车零部件上市公司的半年报…

SQL语言的规则和规范

规则 是什么呢&#xff0c;规则就是我们最基本&#xff0c;每时每刻都要遵守的比如人行道靠右&#xff0c;不能逆行&#xff0c; 规范 呢就是锦上添花&#xff0c;如果你不这么做&#xff0c;是不那么道德&#xff0c;不那么好的&#xff0c;就像小学生见到老师要问好&#…

SAP HCM 如何追踪Z表的日志修改记录

导读 INTRODUCTION 日志记录&#xff1a;这几天遇到一个问题&#xff0c;就是查谁修改Z表的数据&#xff0c;因为HCM系统大部分都是信息类型&#xff0c;信息类型修改是有专门一套的处理机制&#xff0c;那么Z开头的表是不是也有追踪的一套机制。今天我们分析下如何开启Z表追…

新生自我介绍ppt怎么做?用这款在线PPT软件一键自动生成!

新学期伊始&#xff0c;初一新生除了适应新的学习环境&#xff0c;还要制作新生自我介绍ppt&#xff0c;让同学们更好地相互了解彼此&#xff0c;自我介绍成为了一项重要的流程。制作一份精美的自我介绍PPT&#xff0c;无疑能够让你在新班级中脱颖而出&#xff0c;给同学们留下…