
本教程详细介绍了如何使用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免费学习笔记(深入)”;
在尝试解决此类问题时,初学者可能会遇到一些常见的编程陷阱,导致代码无法按预期工作或报错。以下是一些典型的错误点:
为了解决上述问题并实现数据转换,我们将创建一个函数,它接收原始数据列表作为输入,并返回一个包含转换后数值的新列表。
首先,将所有逻辑封装在一个函数中,这有助于代码的模块化、可读性和重用性。在函数内部,初始化一个空列表来存储转换后的数据。
def update_damages(damages_list):
"""
将包含单位('M'/'B')的字符串损失数据转换为浮点数,
并保留缺失数据标识。
参数:
damages_list (list): 包含字符串形式损失数据的列表。
返回:
list: 包含转换后浮点数和缺失数据标识的新列表。
"""
damage_update = [] # 用于存储转换后数据的新列表
# ... 转换逻辑将在此处添加
return damage_update使用 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代码解析:
将所有部分组合起来,并用原始数据进行测试:
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”的混合列表,所有带单位的数值都已正确转换为其浮点形式。
通过遵循这些原则和方法,您可以有效地处理各种复杂的数据清洗和转换任务。
以上就是Python数据处理:将带有单位的字符串数值转换为浮点数的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号