Python数据处理:将带有单位的字符串数值转换为浮点数

python数据处理:将带有单位的字符串数值转换为浮点数

本教程详细介绍了如何使用Python将包含单位(如’M’和’B’)的字符串数值列表转换为浮点数,并妥善处理缺失数据。文章涵盖了函数封装、字符串分割与类型转换、条件判断等核心技术,并纠正了常见的编程错误,旨在帮助读者高效、准确地清洗和转换数据。

在数据处理中,我们经常会遇到需要将非标准格式的字符串数值转换为可计算的数值类型(如浮点数)的场景。例如,一个包含财务损失数据的列表可能混合了带有“M”(百万)或“B”(十亿)单位的字符串,以及表示缺失值的特定文本。本教程将指导您如何高效、准确地完成此类数据转换任务。

原始数据示例

假设我们有以下一个存储损失数据的列表:

damages = ['Damages not recorded', '100M', 'Damages not recorded', '40M', '27.9M', '5M', 'Damages not recorded', '306M', '2M', '65.8M', '326M', '60.3M', '208M', '1.42B', '25.4M', 'Damages not recorded', '1.54B', '1.24B', '7.1B', '10B', '26.5B', '6.2B', '5.37B', '23.3B', '1.01B', '125B', '12B', '29.4B', '1.76B', '720M', '15.1B', '64.8B', '91.6B', '25.1B']

我们的目标是将所有带有’M’或’B’的字符串转换为相应的浮点数值,并将“Damages not recorded”保持不变。

立即学习“Python免费学习笔记(深入)”;

常见问题与编程陷阱分析

在尝试解决此类问题时,初学者可能会遇到一些常见的编程陷阱,导致代码无法按预期工作或报错。以下是一些典型的错误点:

不正确的循环结构: 使用 while len(damage) > len(damage_update) 配合 for damage in damages 这样的嵌套循环是冗余且容易出错的。对于遍历列表并基于每个元素生成新列表的任务,一个简单的 for 循环通常是最佳选择。误用字符串或列表方法: 字符串和列表都没有名为 update() 的方法来直接修改其内容或元素。字符串是不可变的,而列表元素的修改通常通过索引赋值或构建新列表来完成。尝试 damages.update() 会导致 AttributeError。条件语句不完整: elif 语句必须紧跟一个条件表达式。例如,elif : damages.find(B): 是一个语法错误,缺少 elif 后面的条件。字符串查找方法: find() 方法在字符串中查找子字符串,如果找到返回其起始索引,否则返回 -1。更Pythonic和简洁的方式是使用 in 运算符来检查子字符串是否存在。

解决方案:构建高效的数据转换函数

为了解决上述问题并实现数据转换,我们将创建一个函数,它接收原始数据列表作为输入,并返回一个包含转换后数值的新列表。

1. 函数封装与初始化

首先,将所有逻辑封装在一个函数中,这有助于代码的模块化、可读性和重用性。在函数内部,初始化一个空列表来存储转换后的数据。

def update_damages(damages_list):    """    将包含单位('M'/'B')的字符串损失数据转换为浮点数,    并保留缺失数据标识。    参数:    damages_list (list): 包含字符串形式损失数据的列表。    返回:    list: 包含转换后浮点数和缺失数据标识的新列表。    """    damage_update = [] # 用于存储转换后数据的新列表    # ... 转换逻辑将在此处添加    return damage_update

2. 遍历数据并应用转换逻辑

使用 for 循环遍历 damages_list 中的每一个元素,并根据其内容应用不同的转换规则。

def update_damages(damages_list):    damage_update = []    for damage_item in damages_list: # 遍历原始列表中的每个元素        if damage_item == 'Damages not recorded':            # 如果是缺失数据,直接添加到新列表            damage_update.append(damage_item)        elif 'M' in damage_item:            # 如果包含 'M' (百万)            # 1. 使用 split('M')[0] 获取数值部分            # 2. 转换为浮点数            # 3. 乘以 1,000,000            value = float(damage_item.split('M')[0]) * 1_000_000            damage_update.append(value)        elif 'B' in damage_item:            # 如果包含 'B' (十亿)            # 1. 使用 split('B')[0] 获取数值部分            # 2. 转换为浮点数            # 3. 乘以 1,000,000,000            value = float(damage_item.split('B')[0]) * 1_000_000_000            damage_update.append(value)        else:            # 处理其他未知或非标准格式的情况,这里假设所有其他都是数值            # 如果有其他复杂情况,需要进一步的条件判断            try:                damage_update.append(float(damage_item))            except ValueError:                # 如果无法转换为浮点数,可以根据需求处理,例如保留原样或标记为NaN                damage_update.append(f"Unrecognized format: {damage_item}")    return damage_update

代码解析:

for damage_item in damages_list::这是一个标准的Python循环,用于依次取出列表中的每个元素。if damage_item == ‘Damages not recorded’::直接判断元素是否为缺失值标识。elif ‘M’ in damage_item::使用 in 运算符检查字符串中是否包含 ‘M’。damage_item.split(‘M’)[0]:split(‘M’) 会将字符串在 ‘M’ 处分割成一个列表。例如,”100M” 会变成 [‘100’, ”]。我们取第一个元素 [0],即 “100”。float(…):将提取出的字符串数值转换为浮点数。* 1_000_000:将数值乘以一百万,完成单位转换。Python 3.6+ 支持使用下划线 _ 作为数字分隔符,提高可读性。damage_update.append(value):将转换后的数值添加到 damage_update 列表中。

3. 完整代码示例与测试

将所有部分组合起来,并用原始数据进行测试:

damages = ['Damages not recorded', '100M', 'Damages not recorded', '40M', '27.9M', '5M', 'Damages not recorded', '306M', '2M', '65.8M', '326M', '60.3M', '208M', '1.42B', '25.4M', 'Damages not recorded', '1.54B', '1.24B', '7.1B', '10B', '26.5B', '6.2B', '5.37B', '23.3B', '1.01B', '125B', '12B', '29.4B', '1.76B', '720M', '15.1B', '64.8B', '91.6B', '25.1B']def update_damages(damages_list):    """    将包含单位('M'/'B')的字符串损失数据转换为浮点数,    并保留缺失数据标识。    参数:    damages_list (list): 包含字符串形式损失数据的列表。    返回:    list: 包含转换后浮点数和缺失数据标识的新列表。    """    damage_update = []    for damage_item in damages_list:        if damage_item == 'Damages not recorded':            damage_update.append(damage_item)        elif 'M' in damage_item:            value = float(damage_item.split('M')[0]) * 1_000_000            damage_update.append(value)        elif 'B' in damage_item:            value = float(damage_item.split('B')[0]) * 1_000_000_000            damage_update.append(value)        else:            # 如果有其他纯数字字符串,也可以尝试转换为浮点数            try:                damage_update.append(float(damage_item))            except ValueError:                # 对于无法识别的格式,可以选择保留原样或抛出错误                damage_update.append(f"Unrecognized format: {damage_item}")    return damage_update# 调用函数并打印结果updated_damages = update_damages(damages)for item in updated_damages:    print(item)

运行上述代码,您将看到一个包含浮点数和字符串“Damages not recorded”的混合列表,所有带单位的数值都已正确转换为其浮点形式。

总结与注意事项

函数封装: 始终建议将逻辑封装在函数中,以提高代码的可维护性和可重用性。选择正确的循环: 对于遍历列表并基于每个元素生成新列表的任务,for 循环是首选。理解数据类型与方法: 明确字符串和列表各自支持的方法。不要混淆使用,例如 list.update() 或 str.update() 在此场景下是不存在的。字符串操作: in 运算符是检查子字符串是否存在的高效方式,split() 方法是分割字符串的强大工具类型转换: 使用 float() 函数将字符串转换为浮点数。在进行类型转换时,考虑使用 try-except 块来处理潜在的 ValueError,以增加代码的健壮性。构建新列表: 在数据转换过程中,通常推荐构建一个新列表来存储结果,而不是尝试原地修改原始列表,这有助于保持原始数据的完整性并避免意外的副作用。

通过遵循这些原则和方法,您可以有效地处理各种复杂的数据清洗和转换任务。

以上就是Python数据处理:将带有单位的字符串数值转换为浮点数的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1378360.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Python3数学函数怎么用_Python3math模块常用函数使用方法汇总
上一篇 2025年12月14日 19:42:36
Python调用API接口如何调用公开API_Python调用网络公开API接口获取数据的实例
下一篇 2025年12月14日 19:43:00

相关推荐

  • mysql如何理解数据完整性

    数据完整性在MySQL中通过主键、外键、约束等机制确保数据准确一致。1. 实体完整性用主键保证记录唯一,主键非空且不重复;2. 域完整性通过数据类型、CHECK约束、默认值等确保字段数据合法;3. 参照完整性利用外键维护表间关系,支持级联操作;4. 用户定义完整性由开发者通过触发器或程序实现业务规则…

    2026年9月21日
    000
  • Linux如何创建新用户并设置初始密码

    Linux如何创建新用户并设置初始密码Linux如何创建新用户并设置初始密码Linux如何创建新用户并设置初始密码Linux如何创建新用户并设置初始密码

    创建新用户并设初始密码需用useradd加passwd命令,如sudo useradd -m -s /bin/bash devuser创建用户,sudo passwd devuser设置密码;通过sudo usermod -aG sudo devuser赋予sudo权限;密码策略应包含长度、复杂度、…

    2026年9月21日 用户投稿
    000
  • LINUX怎么判断一个文件是否存在_Linux判断文件是否存在方法

    1、使用test命令或[ ]、[[ ]]结构结合-f选项可判断文件是否存在,返回0表示存在;2、通过if语句实现条件判断;3、使用-d、-L等选项可检测目录、符号链接等类型。 如果您需要在脚本或命令行中确认某个文件是否存在于系统中,可以通过多种方式检查其状态。这类操作常用于条件判断和自动化流程控制。…

    2026年9月21日
    000
  • 怎样在VSCode中快速生成注释文档?

    安装插件如Document This和Koro File Header,通过快捷键在VSCode中快速生成函数及文件注释,支持自定义模板,提升注释效率与规范性。 在 VSCode 中快速生成注释文档,主要依赖插件和快捷键配合代码语言特性来实现。不同编程语言支持方式略有差异,但核心思路是使用智能提示和…

    2026年9月21日
    000
  • 如何通过手机点单购买奈雪的茶抖音券?快速指南!

    在数字化生活日益普及的今天,智能手机已经深度融入我们的日常。对于喜爱奈雪的茶的消费者而言,通过手机获取抖音优惠券已成为一种高效又实惠的方式。本文将为您一步步解析如何使用手机轻松下单购买奈雪的茶抖音券,并提供实用操作技巧,助您畅享优惠好茶。 第一步:下载奈雪的茶官方应用 打开您手机上的应用市场(如苹果…

    2026年9月21日
    000
  • Java中浮点数比较的陷阱:理解double类型的不精确性与正确比较方法

    java中`double`类型因其二进制浮点表示的固有不精确性,即使在相同java版本和架构下,也可能在不同环境中产生微小的数值差异。直接使用`==`比较浮点数是不可靠的,因为它无法容忍这些细微的舍入误差。正确的做法是采用基于容差(epsilon)的比较方法,通过判断两数之差的绝对值是否小于一个预设…

    2026年9月21日
    100
  • 如何下载豆包电脑网页版_豆包电脑网页版正版链接

    豆包AI电脑及网页版可通过官网和官方应用商店安全获取。1、访问https://www.doubao.com登录使用网页版;2、官网下载电脑客户端,支持Windows和macOS;3、通过Microsoft Store或App Store搜索“豆包 AI”,认准北京字节跳动网络技术有限公司开发,确保正…

    2026年9月21日
    100
  • 如何避免协程中的共享资源竞争?

    避免协程中的共享资源竞争可以通过以下方法:1. 使用锁(locks),如互斥锁或读写锁,确保同一时间只有一个协程访问共享资源。2. 采用无锁数据结构(lock-free data structures),通过原子操作和cas操作提高并发性能。3. 实施消息传递(message passing),通过…

    2026年9月21日
    000
  • 猎豹浏览器官方网址链接入口 猎豹浏览器平台直达访问官方主页

    猎豹浏览器官方网址是http://m.liebao.cn/?f=www,该网站提供极速浏览体验、个性化界面设置和实用功能整合,如双渲染引擎、安全防护、主题皮肤、广告过滤等。 猎豹浏览器官方网址链接入口在哪里?这是不少网友都关注的,接下来由PHP小编为大家带来猎豹浏览器平台直达访问官方主页,感兴趣的网…

    2026年9月21日
    000
  • Java构造方法的执行顺序及注意事项

    构造方法执行顺序为:父类静态代码块→子类静态代码块→父类实例初始化块→父类构造方法→子类实例初始化块→子类构造方法,且super()必须位于子类构造方法首行。 Java构造方法的执行顺序涉及继承关系中父类与子类的初始化过程,理解这一流程对掌握对象创建机制非常重要。当创建一个子类对象时,JVM会自动确…

    2026年9月21日
    000
  • 微软 Windows 10 停服在即,官方升级工具却突然罢工

    10月13日,随着Windows 10的官方支持即将于次日(10月14日)正式终止,微软近期加大了对Windows 11的宣传力度,频繁推出广告和推广活动,强调新系统的多项升级与优势,吸引了不少用户考虑迁移至Windows 11。 然而颇具讽刺意味的是,在这一关键节点,微软自家的关键工具却出现了故障…

    2026年9月21日
    000
  • VSCode怎么生成项目模板_VSCode使用自定义代码片段创建项目模板教程

    答案:VSCode可通过自定义代码片段高效生成文件模板,结合工作区设置与脚手架工具实现项目初始化。利用用户代码片段(User Snippets)定义常用代码结构,如React组件或HTML骨架,通过prefix触发,支持制表位快速编辑;推荐将团队共享片段设为工作区级并提交至Git,确保规范统一;配合…

    2026年9月21日
    600
  • google浏览器开发者工具怎么打开_google浏览器打开开发者工具方法

    1、使用F12或Ctrl+Shift+I快捷键可快速打开开发者工具;2、右键点击页面元素选择“检查”能直接定位HTML节点;3、通过浏览器右上角菜单进入“更多工具”-“开发者工具”也可启动;4、在地址栏输入chrome://inspect可管理远程设备调试并打开对应开发者工具窗口。 如果您在使用 G…

    2026年9月21日
    000
  • win10键盘打字错乱怎么办_win10键盘错乱排查与修复教程

    首先检查Num Lock状态并关闭数字小键盘锁定,接着更新或重装键盘驱动程序,再禁用Program Compatibility Assistant Service服务,最后使用360安全卫士等工具修复系统错误,逐步排查键盘输入混乱问题。 如果您在使用Windows 10系统时,发现键盘输入的字符与按…

    2026年9月21日
    000
  • Laravel与Vue.js/React前端框架集成

    laravel可以与vue.js或react集成。1) 使用命令“php artisan preset vue”或“php artisan preset react”设置开发环境。2) 在laravel视图中引入编译后的javascript文件。3) 通过laravel的api路由和前端框架的htt…

    2026年9月21日
    000
  • AI推文助手如何制作用户指南 AI推文助手的说明文档创作

    AI推文助手如何制作用户指南 AI推文助手的说明文档创作AI推文助手如何制作用户指南 AI推文助手的说明文档创作AI推文助手如何制作用户指南 AI推文助手的说明文档创作AI推文助手如何制作用户指南 AI推文助手的说明文档创作

    答案:配置账户、设定风格模板、生成推文、安排发布时间、监控数据。依次完成绑定社交账号、选择语气类型与关键词、输入主题生成内容、设置定时发布及查看分析仪表板,实现高效创作与优化。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ 如果您希望使用A…

    2026年9月21日 用户投稿
    000
  • windows怎么使用放大镜工具_Windows放大镜功能使用方法

    首先通过快捷键Win+加号开启放大镜,再通过设置调整模式与参数;具体包括全屏、镜头、停靠三种视图模式,并支持自定义热键与鼠标联动,提升操作效率。 如果您在使用Windows系统时遇到屏幕内容过小或难以看清的情况,可以借助系统自带的放大镜工具来放大显示区域。以下是关于如何使用Windows放大镜功能的…

    2026年9月21日
    000
  • 如何为特定语言配置VSCode的语法高亮?

    安装对应语言扩展并关联文件类型,可实现VSCode语法高亮。首先通过扩展面板安装目标语言插件,如Ruby或Rust;若文件扩展名未被识别,需手动将扩展名关联至正确语言;最后可在settings.json中配置editor.tokenColorCustomizations来自定义高亮颜色,确保语法解析…

    2026年9月21日
    000
  • Linux怎么使用systemctl管理服务

    Linux怎么使用systemctl管理服务Linux怎么使用systemctl管理服务Linux怎么使用systemctl管理服务Linux怎么使用systemctl管理服务

    systemctl是Linux中管理systemd服务的核心工具,提供统一命令集来启动、停止、重启、查看服务状态及设置开机自启,支持并行启动、依赖管理与Cgroups资源控制,相比SysVinit更高效;通过创建/etc/systemd/system/下的.service文件可自定义服务,包含[Un…

    2026年9月21日 用户投稿
    100
  • 苹果手机如何清理应用缓存数据

    苹果手机可通过系统设置和应用内操作管理缓存。1. 进入“设置”>“通用”>“iPhone存储空间”查看各App占用,卸载或删除不常用App以释放空间;2. 在微信中清理“缓存”及管理“聊天记录”,在抖音、快手等App内使用“清理缓存”功能;3. 清除Safari浏览器的历史记录与网站数据…

    2026年9月21日
    000

发表回复

登录后才能评论
关注微信