0

0

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

花韻仙語

花韻仙語

发布时间:2025-11-07 12:51:06

|

730人浏览过

|

来源于php中文网

原创

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免费学习笔记(深入)”;

常见问题与编程陷阱分析

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

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

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

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

Smodin AI Content Detector
Smodin AI Content Detector

多语种AI内容检测工具

下载

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开发工具
python开发工具

php中文网为大家提供各种python开发工具,好的开发工具,可帮助开发者攻克编程学习中的基础障碍,理解每一行源代码在程序执行时在计算机中的过程。php中文网还为大家带来python相关课程以及相关文章等内容,供大家免费下载使用。

706

2023.06.15

python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

624

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

734

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

616

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

1234

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

547

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

573

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

694

2023.08.11

苹果官网入口直接访问
苹果官网入口直接访问

苹果官网直接访问入口是https://www.apple.com/cn/,该页面具备0.8秒首屏渲染、HTTP/3与Brotli加速、WebP+AVIF双格式图片、免登录浏览全参数等特性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

7

2025.12.24

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 0.6万人学习

Django 教程
Django 教程

共28课时 | 2.4万人学习

SciPy 教程
SciPy 教程

共10课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号