Python 将数据帧中所有值的科学符号中的“D”替换为“E”

Python 将数据帧中所有值的科学符号中的“D”替换为“E”,python,pandas,dataframe,replace,Python,Pandas,Dataframe,Replace,我有一个来自旧fortran代码的输出文件,它以双精度输出值。因此,科学记数法中给出的任何数字的形式都是1.23D+4。我将此csv保存为熊猫数据框,并使用它进行数据分析 我正在寻找一种方法,在数据帧dedx中的每个条目中将D转换为E。我试过: for c in dedx.columns: for i in dedx[c]: if isinstance(i, str): i = float(i.replace('D', 'E'))

我有一个来自旧fortran代码的输出文件,它以双精度输出值。因此,科学记数法中给出的任何数字的形式都是1.23D+4。我将此csv保存为熊猫数据框,并使用它进行数据分析

我正在寻找一种方法,在数据帧dedx中的每个条目中将D转换为E。我试过:

for c in dedx.columns: 
    for i in dedx[c]:
            if isinstance(i, str):
                i = float(i.replace('D', 'E'))
这会更改循环中的值,如使用printi所示,但不会更改实际的数据帧

数据帧的示例如下所示:

ENERGY(MEV) DE/DX(MEV/MM)   DE/DX(MEV.CM2/MG)   RANGE(MM) RANGE(MG/CM2)
0   0.01    4.908059D+01    4.811823D-02    0.000477    0.486766
1   0.50    4.917734D+02    4.821308D-01    0.002121    2.162930
2   1.00    5.261802D+02    5.158630D-01    0.003088    3.149690
3   1.50    5.105083D+02    5.004984D-01    0.004050    4.130490
4   2.00    4.842530D+02    4.747579D-01    0.005054    5.155440
5   2.50    4.568363D+02    4.478788D-01    0.006117    6.239750
6   3.00    4.309473D+02    4.224973D-01    0.007245    7.389450
7   3.50    4.072914D+02    3.993053D-01    0.008438    8.607170
8   4.00    3.859186D+02    3.783516D-01    0.009700    9.894000
9   4.50    3.666619D+02    3.594725D-01    0.011030    11.250200
10  5.00    3.492947D+02    3.424458D-01    0.012427    12.675800
11  5.50    3.335896D+02    3.270486D-01    0.013892    14.170300
12  6.00    3.193387D+02    3.130772D-01    0.015425    15.733200
13  6.50    3.063596D+02    3.003526D-01    0.017024    17.364200
14  7.00    2.944946D+02    2.887202D-01    0.018689    19.062500
15  7.50    2.836086D+02    2.780477D-01    0.020419    20.827500
16  8.00    2.735860D+02    2.682215D-01    0.022215    22.658800
17  8.50    2.643277D+02    2.591448D-01    0.024074    24.555600
18  9.00    2.557488D+02    2.507341D-01    0.025998    26.517400
19  9.50    2.477762D+02    2.429178D-01    0.027984    28.543700
20  10.00   2.403466D+02    2.356339D-01    0.030033    30.633900

尝试使用此选项替换整个代码:

dedx[c]=dedx[c]。applylambda x:floatx.replacemented,E如果是instancex,str
假设dedx[c]是对dataframe列的引用,如果要修改,可以在使用pandas.read\u csv读取文件时进行这种转换,而不是循环。效率更高

d_to_e = lambda x : float(x.replace('D', 'E'))

df = pd.read_csv('yourfilename.csv', converters={'DE/DX(MEV/MM)' : d_to_e, 'DE/DX(MEV.CM2/MG)' : d_to_e})
converters参数允许您对每列的数据应用函数。结果存储在数据帧中。转换器接受一个dict,其中包含要应用于每个列数据的列名和函数。
我定义了函数d_to_e,它执行字母替换,并像在循环中一样返回一个浮点。

字符串是不可变的,str.replace会创建一个与数据帧中的字符串不同的新字符串。@jornsharpe我假设,如果在循环中我输入I=new_值,旧字符串将被覆盖?这只是分配给局部变量i,它根本不会影响dedx。如何读取旧fortran输出文件?您是否使用pandas.read_csv?@Valentino,是的,文件是使用pandas.read_csvI读取的。我刚刚尝试了此代码,收到了一条“SyntaxError:invalid syntax”错误消息。那么c对您来说是什么呢?因此,在编写代码前一步——例如,尝试c=DE/DXMEV.CM2/MG