Python数据处理:规范化带单位字符串与缺失值的列表数据

Python数据处理:规范化带单位字符串与缺失值的列表数据

本教程旨在指导如何高效处理包含混合数据类型的python列表,特别是将带有’m’(百万)或’b’(十亿)单位的损害数据字符串转换为标准浮点数值,并妥善保留”damages not recorded”等缺失数据标识。文章将详细解析常见编程误区,并提供一个结构清晰、易于理解的python函数来实现这一数据清洗与转换过程。

在数据分析和处理的场景中,我们经常会遇到需要对原始数据进行清洗和规范化的任务。一个典型的例子是处理包含数值和单位的字符串,如“100M”代表100百万,或者“1.42B”代表1.42十亿,同时还需要处理明确标记的缺失值。本教程将以一个具体的Python列表为例,详细讲解如何编写一个健壮的函数来完成这类数据转换。

原始数据与目标

假设我们有以下一个损害数据列表,其中包含字符串形式的数值(带’M’或’B’后缀)以及表示缺失数据的字符串“Damages not recorded”:

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’的数值转换为对应的浮点数(例如,’100M’变为100,000,000.0,’1.42B’变为1,420,000,000.0),并保持“Damages not recorded”字符串不变。

常见编程误区分析

在尝试解决此类问题时,初学者可能会遇到一些常见的逻辑和语法错误。理解这些误区有助于我们编写更正确的代码。

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

不正确的循环结构:例如,使用while len(damage) > len(damage_update)结合for damage in damages。这种结构是冗余且容易出错的。for循环已经能够遍历列表的所有元素,while循环在这里是不必要的,并且变量名damage在while条件中可能与for循环中的元素混淆。正确的做法是直接使用for循环遍历原始列表。

字符串与列表方法的混淆:damages.find(M):find()是字符串方法,用于查找子字符串。在这里,damages是一个列表,不能直接调用find()。我们应该对列表中的每个元素(即单个字符串)调用字符串方法。此外,M应该作为字符串字面量’M’使用。damages.update():Python的列表类型并没有名为update()的方法。如果目的是修改列表元素,通常是直接通过索引赋值,或者在构建新列表时添加转换后的元素。对于字符串,也没有update()方法来直接替换部分内容。

elif条件缺失:elif : 后面必须跟随一个条件表达式。一个空的elif会导致语法错误。

循环内打印:在循环的每次迭代中打印整个结果列表print(damage_update),会导致大量重复输出,通常我们只关心最终的结果。

正确的数据转换策略

要正确实现数据转换,我们需要遵循以下步骤:

封装为函数: 将转换逻辑封装在一个函数中,提高代码的模块化和复用性。遍历原始列表: 使用for循环逐个处理列表中的每个元素。条件判断:如果元素是“Damages not recorded”,则直接添加到新列表。如果元素以’M’结尾,则去除’M’,转换为浮点数,并乘以1,000,000。如果元素以’B’结尾,则去除’B’,转换为浮点数,并乘以1,000,000,000。处理其他未知格式(可选,通常是抛出错误或记录)。构建新列表: 将转换后的值添加到新的列表中。返回新列表: 函数返回处理后的新列表。

示例代码:实现数据转换函数

下面是一个实现上述策略的Python函数:

def update_damage_data(damages_list):    """    将包含带'M'/'B'单位的损害数据字符串转换为浮点数,    并保留“Damages not recorded”标识。    参数:        damages_list (list): 包含损害数据字符串的列表。    返回:        list: 转换后的浮点数列表,缺失值保持为字符串。    """    updated_damages = []    for item in damages_list:        if item == 'Damages not recorded':            updated_damages.append(item)        elif item.endswith('M'):            # 移除'M',转换为浮点数,然后乘以100万            value_str = item.replace('M', '')            try:                value_float = float(value_str) * 1_000_000                updated_damages.append(value_float)            except ValueError:                # 处理转换失败的情况,例如 'abcM'                print(f"警告: 无法将 '{item}' 转换为数值,保留原始字符串。")                updated_damages.append(item)        elif item.endswith('B'):            # 移除'B',转换为浮点数,然后乘以10亿            value_str = item.replace('B', '')            try:                value_float = float(value_str) * 1_000_000_000                updated_damages.append(value_float)            except ValueError:                # 处理转换失败的情况,例如 'xyzB'                print(f"警告: 无法将 '{item}' 转换为数值,保留原始字符串。")                updated_damages.append(item)        else:            # 处理不符合已知格式的其他字符串            print(f"警告: 未知格式的损害数据 '{item}',保留原始字符串。")            updated_damages.append(item)    return updated_damages# 原始数据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']# 调用函数并打印结果processed_damages = update_damage_data(damages)print(processed_damages)# 验证部分结果print(f"n原始列表长度: {len(damages)}")print(f"处理后列表长度: {len(processed_damages)}")print(f"第一个非缺失值转换: {processed_damages[1]} (期望: 100000000.0)")print(f"第一个B单位转换: {processed_damages[13]} (期望: 1420000000.0)")

代码解析:

update_damage_data(damages_list): 定义了一个接受一个列表作为参数的函数。updated_damages = []: 初始化一个空列表来存储转换后的数据。for item in damages_list:: 遍历输入列表中的每一个元素。item == ‘Damages not recorded’: 精确匹配缺失值字符串。item.endswith(‘M’) 和 item.endswith(‘B’): 使用字符串的endswith()方法检查后缀,这是比find()更直观和健壮的方式来判断字符串是否

以上就是Python数据处理:规范化带单位字符串与缺失值的列表数据的详细内容,更多请关注创想鸟其它相关文章!

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Python中浮点数结果与期望值列表的近似匹配校验
上一篇 2025年12月14日 19:45:13
Pandas高效查找历史条件匹配的最新索引:Bisect方法详解
下一篇 2025年12月14日 19:45:22

相关推荐

  • win10不慎把系统全删了怎么办?win10不慎把系统全删了的解决方法

    在使用电脑的过程中,我们通常会定期清理不必要的文件,但有时一不小心可能会误删系统文件,这在windows 10中尤为常见。如果不幸发生这种情况,不必过于担心,下面为大家提供了一份详细的解决教程。 如何解决Windows 10误删系统文件的问题: 1、首先,右键点击屏幕左下角的开始按钮,选择“Wind…

    2026年9月4日
    300
  • 小红书注销账号多久可以重新注册_小红书账号重新注册规则

    注销后需等待48小时冷却期,若用原手机号重新注册还需额外24小时解绑,共72小时;建议使用新邮箱注册可立即创建新账号。 如果您已注销小红书账号并希望重新注册,系统会根据平台规则对重新注册的时间和条件进行限制。以下是具体的处理方式: 本文运行环境:iPhone 15 Pro,iOS 18 一、48小时…

    2026年9月4日
    000
  • 高德地图怎么规划沿途有充电桩的路线_高德地图电动车充电站路线规划

    答案:可通过高德地图规划新能源长途充电路线。先在“我的车辆”注册车型,输入目的地后选择“新能源”模式,系统将推荐沿途充电站;或上滑调出“沿途服务”面板,点击“电车”查看充电站位置、功率与实时状态,设为途经点完成规划。 如果您计划驾驶新能源汽车进行长途出行,但担心途中电量不足,可以通过高德地图提前规划…

    2026年9月4日
    100
  • VSCode怎么弄颜色_VSCode自定义语法高亮和主题颜色教程

    自定义VSCode颜色需通过settings.json文件,结合主题扩展与个性化设置。首先安装喜欢的颜色主题,再通过workbench.colorCustomizations调整UI元素(如侧边栏、状态栏),使用editor.tokenColorCustomizations修改代码语法高亮,包括通用…

    2026年9月4日
    000
  • 铁路12306怎么开发票_铁路12306发票开具方法

    自2025年10月1日起全国铁路推行电子发票,旅客可通过12306 App单次或批量开具电子发票,填写发票信息后下载或发送至邮箱;也可通过12306网站或车站窗口、自助机申请,方便报销。 如果您在完成铁路行程后需要获取报销凭证,但发现无法领取纸质车票,这是因为自2025年10月1日起全国铁路已全面推…

    2026年9月4日
    100
  • 快兔网盘怎么举报违规内容或文件_快兔网盘违规内容举报流程指南

    快兔网盘提供四种举报渠道:1. App内长按文件选择“举报”并提交;2. 网页端通过官网底部链接填写在线表单;3. 发送邮件至jubao@kutu.com,附证据材料;4. 拨打400-800-1234联系客服实名举报。 如果您在使用快兔网盘时发现违规内容或文件,为了维护良好的网络环境和自身权益,您…

    2026年9月4日
    200
  • 免费PPT生成支持动画吗_免费工具实现PPT动画的技巧

    免费PPT工具可通过AI自动生成动画、手动设置或导出为GIF实现生动效果。1、使用Gamma.app或Canva等在线平台,输入描述语自动生成带动画的幻灯片;2、在LibreOffice Impress中通过“自定义动画”功能精细控制进入、强调与退出效果;3、将Google Slides等工具制作的…

    2026年9月4日
    100
  • 企查查怎么查找法人代表_企查查如何快速查找企业法人详细方法

    可通过企业名称、法人姓名、高级筛选或扫描营业执照二维码在企查查查询法定代表人信息。一、输入企业名称搜索并进入详情页查看法人姓名及身份证号(部分脱敏);二、输入法人姓名后选择“人物”类别,查看其关联企业及任职情况;三、使用高级筛选功能按地区、行业等条件定位企业,再查看法人信息;四、用APP扫描营业执照…

    2026年9月4日
    000
  • 红队战术-躲避日志检查

    红队战术-躲避日志检查红队战术-躲避日志检查红队战术-躲避日志检查红队战术-躲避日志检查

    前言 Windows事件日志概述:Windows系统日志记录系统中硬件、软件和系统问题的信息,并监控系统中发生的事件。用户可以利用这些日志检查错误原因或追踪攻击者留下的痕迹。 禁用Windows事件日志记录是红队常用策略之一,旨在减少安全人员可用于检测和审核的数据量,提升红队活动的隐蔽性。通常,安全…

    2026年9月4日 用户投稿
    100
  • PHP中动态获取调用者文件命名空间的高级技巧

    本文探讨了在php中如何在不作为参数传递的情况下,动态获取调用当前方法的文件的命名空间。通过结合debug_backtrace()函数追踪调用栈获取调用者文件路径,并利用token_get_all()对文件内容进行词法分析,从而精确提取出调用者文件中声明的命名空间。这为需要在运行时感知调用上下文的p…

    2026年9月4日
    100
  • 飞瓜数据 app 怎样绑定手机号

    在使用飞瓜数据 app 时,完成手机号绑定是极为关键的一步,这将为您解锁更多实用功能并提升账户安全性。接下来,我们将为您逐步说明如何在飞瓜数据 app 中绑定手机号。 第一步,启动飞瓜数据 app。打开后,您会看到底部导航栏包含多个核心功能入口。 接着,点击屏幕右下角的“我的”图标,进入个人中心界面…

    2026年9月4日
    100
  • 铁路12306怎么添加港澳通行证信息_铁路12306港澳通行证添加流程

    打开12306 App或官网,登录后进入“我的”页面;2. 点击“乘车人”或“常用联系人”并选择“添加”;3. 证件类型选“港澳居民来往内地通行证”,填写姓名、证件号、出生日期及有效期;4. 提交信息完成绑定,注册时亦可直接使用该证件在线核验。 如果您需要在铁路12306平台添加港澳通行证信息以便购…

    2026年9月4日
    400
  • 百度网盘里怎么保存TXT小说_百度网盘保存TXT免费小说操作指南

    找到TXT小说的百度网盘分享链接,通过搜索引擎、社交群组或电子书网站获取;2. 点击链接并输入提取码后,将文件保存至个人网盘指定文件夹;3. 登录网盘账号,在保存位置查看在线预览或下载到本地,实现免费便捷的小说收藏与跨设备同步。 想把TXT小说存到百度网盘,其实很简单。核心就是“找到资源、保存进网盘…

    2026年9月4日
    100
  • 学信网能查到预科生的学籍吗_预科生学籍查询情况

    预科生学籍能否查询取决于是否完成正式录取和学校注册。若已取得正式学籍并由学校上报,可登录学信网或其微信公众号查询;未查到信息则需联系教务部门确认注册进度。 如果您是预科阶段的学生,想要确认自己的学籍信息是否能在学信网查询到,这通常取决于您当前的学籍状态以及所在学校的注册进度。以下是关于预科生学籍查询…

    2026年9月4日
    100
  • 基于PHP实现登录用户专属文件下载访问控制

    本教程旨在解决用户登录后才能下载特定文件,而未登录用户即使知晓文件路径也无法访问的问题。通过介绍一种基于PHP脚本的解决方案,替代传统.htaccess的限制,实现对文件下载的精细化权限控制,确保只有经过身份验证的用户才能获取指定资源。 引言:登录用户文件下载的挑战 在web应用中,我们经常需要提供…

    2026年9月4日
    100
  • 如何为iPhone13Pro获取固件包?最新固件下载攻略

    首先通过Apple官方iTunes或Finder下载iPhone 13 Pro固件,确保安全可靠;其次可从iStoreOS平台获取优化版固件;最后开发者可登录苹果开发者网站下载测试版固件。 如果您尝试为您的iPhone 13 Pro获取固件包,但无法找到可靠的来源,则可能是由于未访问官方或受信任的固…

    2026年9月4日
    100
  • 晋江app如何查看作者的更新频率_晋江作者更新情况查看方法

    将作品加入书架可标记更新;2. 开启通知能及时接收新章节提醒;3. 访问作者专栏可查看详细更新记录。通过这三种方式可精准追踪晋江作者的更新动态,避免因首页刷新过快而遗漏信息。 如果您想了解晋江文学城中某位作者的更新动态或作品更新频率,但由于网站文章更新较快,首页仅展示最近三分钟内更新的20篇文章,因…

    2026年9月4日
    000
  • 怎么更换VSCode的语言_VSCode界面语言切换与本地化设置教程

    更改VSCode语言需安装对应语言包并配置显示语言,重启生效;2. 语言包安装失败可检查网络、清缓存或手动安装.vsix文件;3. 界面语言与文件编码无关,前者影响UI显示,后者决定字符存储解析;4. 扩展语言问题多因不支持多语言或设置不同步,可检查扩展设置或系统语言。 VSCode更改语言其实非常…

    2026年9月4日
    200
  • 百度小说APP如何更新版本_百度小说应用更新升级指南

    首先通过应用商店更新百度小说APP以解决功能异常,若商店未更新可手动下载官方APK安装包并开启未知来源权限完成升级,最后建议启用应用商店的自动更新功能避免问题复发。 如果您尝试使用百度小说APP阅读书籍,但遇到功能异常或界面显示错误,可能是由于当前版本过旧导致与服务器不兼容。以下是解决此问题的步骤:…

    2026年9月4日
    100
  • b站怎么看关注分组_B站关注列表分组管理与查看

    首先打开B站App,进入“我的”页面后点击“关注”,可查看已创建的分组标签并滑动选择浏览;接着通过点击UP主头像下的“已关注”按钮,选择“设置分组”并新建分组名称(如“科技数码”),创建后勾选保存即可将UP主加入新分组;最后可对多个UP主逐一重复操作,实现批量分组管理。 如果您希望更好地管理在B站关…

    2026年9月4日
    200

发表回复

登录后才能评论
关注微信