You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python读取含Fortran D格式科学计数法的TXT文件转DataFrame问题

解决Fortran格式科学计数法转DataFrame的问题

我有一个包含10列的TXT文件,想要将其读取为DataFrame。但文件中的数值是Fortran程序输出的特殊科学计数法格式(例如9.677975573367686D+00),无法直接转换为float类型。

尝试过以下代码均未生效:

  • data = np.loadtxt('data.txt', converters={0: lambda s: s.replace(b'D', b'E')})
  • float(val.replace('D', 'E'))

可行解决方案

方案1:全局替换后用Pandas读取

先一次性替换文件中所有的D为E,再用Pandas按空格分隔读取:

import pandas as pd

with open('data.txt', 'r') as f:
    processed_content = f.read().replace('D', 'E')

# 用StringIO模拟文件对象传入read_csv,按任意空白字符分隔列
df = pd.read_csv(pd.compat.StringIO(processed_content), sep='\s+', header=None)

方案2:给每列指定转换器

针对10列分别设置转换器,处理Fortran格式的数值:

import pandas as pd

def fortran_to_float(value):
    return float(value.replace('D', 'E'))

# 为0到9列都绑定转换器
converter_dict = {col: fortran_to_float for col in range(10)}
df = pd.read_csv('data.txt', sep='\s+', header=None, converters=converter_dict)

方案3:用Numpy处理后转DataFrame

如果习惯用Numpy读取,注意处理字节串转字符串的问题:

import numpy as np
import pandas as pd

def convert_byte_str(s):
    # Numpy读取返回字节串,先解码为字符串再替换
    return float(s.decode('utf-8').replace('D', 'E'))

# 给所有10列设置转换器
data_array = np.genfromtxt('data.txt', converters={i: convert_byte_str for i in range(10)})
df = pd.DataFrame(data_array)

原代码失效原因说明

  • 第一个代码仅处理了第0列,剩余9列未做转换,导致整体读取失败;
  • 第二个代码如果是在未正确处理字节串的场景下使用(比如Numpy返回的是bytes类型而非字符串),直接调用replace('D', 'E')会报错,需要先解码为字符串。

内容的提问来源于stack exchange,提问作者Hamid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 19:20:47