Python 将数据帧中所有值的科学符号中的“D”替换为“E”
我有一个来自旧fortran代码的输出文件,它以双精度输出值。因此,科学记数法中给出的任何数字的形式都是1.23D+4。我将此csv保存为熊猫数据框,并使用它进行数据分析 我正在寻找一种方法,在数据帧dedx中的每个条目中将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'))
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