如何将TXT文件中字符串格式的科学计数法数值转换为浮点数?
如何将TXT文件中字符串格式的科学计数法数值转换为浮点数?
看起来你遇到的问题根源是分隔符设置不对!咱们先理清楚问题出在哪:
从你贴的输出能看到,每一行里的多个科学计数法数值是用多个空格分隔的,但你在read_csv里指定了delimiter="\t"(制表符),这就导致pandas把整一长串的数值当成了单独的一列。这种情况下你再去转数值,整个长字符串肯定没法转成单个浮点数,结果自然全是NaN了。
给你两个简单的解决思路,核心都是先把数据正确拆分成单独的列:
方案1:读取时直接用正确的分隔符
直接把分隔符改成sep="\s+"(它能匹配一个或多个空白字符,不管是空格还是制表符都能处理),pandas会自动把每个科学计数法的字符串分到单独的列,并且默认就能识别成浮点数:
import pandas as pd import numpy as np # 用\s+匹配多个空格分隔的数值,正确拆分列 data_Test = pd.read_csv("TestData5.txt", header=None, sep="\s+") # 可选:如果有个别异常值,强制转换确保数值类型 data_Test = data_Test.apply(pd.to_numeric, errors='coerce') # 查看转换后的结果 print("TestData (first 5 rows):\n", data_Test.head())
运行后你会发现,原来的长字符串被拆成了多列,每列都是正常的浮点数,不会再出现NaN了。
方案2:先按原方式读取,再拆分列
如果你因为某些原因必须先按整列读取,也可以后续拆分字符串列:
import pandas as pd import numpy as np # 先按原方式读取整列字符串 data_Test = pd.read_csv("TestData5.txt", header=None, delimiter="\t", dtype=str) # 拆分每一行的字符串成多个数值列 data_Test = data_Test[0].str.split(expand=True) # 转换为浮点数 data_Test = data_Test.apply(pd.to_numeric, errors='coerce') # 查看结果 print("TestData (first 5 rows):\n", data_Test.head())
这个方案是先把整列的长字符串按空格拆分,再转成数值类型,效果和方案1一致。
最后可以验证下数据类型,用print(data_Test.dtypes),正常情况下所有列都会显示float64,说明转换成功啦!
备注:内容来源于stack exchange,提问作者n00bcoder_24
相关产品推荐
相关产品推荐

