如何将字符串格式的科学计数法数值列表转换为float或int类型
是否由科学计数法导致字符串类型
不是。
你从CSV列中读取到的内容本身就是以字符串形式存储的类数组格式文本,和内容中的e-xx科学计数法标识无关。Python原生支持直接转换科学计数法格式的字符串为浮点数,比如float("3.94912873e-04")可正常返回对应浮点值,不会触发类型异常。
字符串转数值的实现方法
以下是Python环境下的两种常用可行方案:
方案1:基于ast模块安全转换为列表
该方法无额外第三方依赖,转换过程安全无代码注入风险:
import ast # 替换为你从CSV读取到的原始字符串 raw_str = """[[1.01782362e-05 1.93798303e-04 7.96163586e-05 5.08812627e-06 1.39600188e-05 3.94912873e-04 2.33748418e-04 1.22856018e-05]]""" # 先移除换行符,再把数值之间的空格替换为逗号,适配Python列表语法 processed_str = raw_str.replace("\n", " ").replace(" ", ",") # 转换为二维浮点列表 float_list = ast.literal_eval(processed_str)
方案2:直接转换为Numpy数组
如果后续需要做数值计算,可直接用Numpy方法转换,步骤更简洁:
import numpy as np raw_str = """[[1.01782362e-05 1.93798303e-04 7.96163586e-05 5.08812627e-06 1.39600188e-05 3.94912873e-04 2.33748418e-04 1.22856018e-05]]""" # 移除所有括号,提取数值部分 num_part = raw_str.strip("[]") # 读取数值并调整为原二维数组形状 float_arr = np.fromstring(num_part, sep=" ").reshape(1, -1)
转整数的注意事项
- 原内容所有数值均小于1,直接转换为整数会默认取整为0
- 如有整数存储需求,建议先按需要的精度乘以对应倍率后再转,比如要保留6位小数精度:
# 基于numpy数组转换示例 int_arr = (float_arr * 1e6).astype(int)
内容的提问来源于stack exchange,提问作者Simplicity
相关产品推荐
相关产品推荐

