Python科学计数法-将D转换为E

时间:2019-02-26 00:48:48

标签: python string pandas replace

我有一个文本文件,其中包含许多用科学计数法表示的值。但是,不是用E(即2.0E-05)来写科学记号,而是用D(即2.0D-05)来写。

LATI    LONGI   AREA    CO2
   -0.5548999786D+01        0.3167600060D+02        0.1000000000D+07        0.1375607300D+08
   -0.1823500061D+02        0.3668500137D+02        0.1000000000D+07        0.6878036500D+07
   -0.6650000215D+00        0.2960499954D+02        0.7500000000D+06        0.5086381000D+07
   -0.9671999931D+01        0.2264999962D+02        0.1000000000D+07        0.2657306000D+08
   -0.1321700001D+02        0.4895299911D+02        0.6893938750D+06        0.8595105000D+07
   -0.1152099991D+02        0.2493499947D+02        0.1000000000D+07        0.2615907200D+08

如何将所有D替换为E?

基于另一个stackoverflow答案,我编写了以下循环,但是它非常慢,并且可能有一种更简单的方法。

for ind in range(len(df_fires.LATI)):
    val = df_fires.LATI[ind]
    df_fires.LATI[ind] = float(val.replace('D','E'))

    val = df_fires.LONGI[ind]
    df_fires.LONGI[ind] = float(val.replace('D','E'))

示例文件:https://www.dropbox.com/s/5glujwqux6d0msh/test.txt?dl=0

2 个答案:

答案 0 :(得分:2)

尝试sed将文件中的所有D替换为E。在使用python解析文件之前执行此操作。

sed -e 's:D:E:g' test.txt >> test_new.txt

如果要将其保留在python中,请尝试以下解决方案https://stackoverflow.com/a/11332274/5196039

答案 1 :(得分:1)

您可以使用apply将函数应用于列中的每个元素。

不知道它是否会更快,因为我只有一个很小的数据集,但绝对是更少的代码:

import pandas as pd

columns = ['LATI', 'LONGI', 'AREA', 'CO2']
data = [['-0.5548999786D+01', '0.3167600060D+02', '0.1000000000D+07', '0.1375607300D+08'], 
['-0.1823500061D+02', '0.3668500137D+02', '0.1000000000D+07', '0.6878036500D+07'], 
['-0.6650000215D+00', '0.2960499954D+02',  '0.7500000000D+06', '0.5086381000D+07'], 
['-0.9671999931D+01', '0.2264999962D+02', '0.1000000000D+07',  '0.2657306000D+08'], 
['-0.1321700001D+02', '0.4895299911D+02', '0.6893938750D+06', '0.8595105000D+07'], 
['-0.1152099991D+02',  '0.2493499947D+02', '0.1000000000D+07', '0.2615907200D+08']]    

df = pd.DataFrame(columns=columns, data=data)
for column_name in columns:
    df[column_name] = df[column_name].apply(lambda x: x.replace('D', 'E'))

df的输出:

                LATI        ...                      CO2
0  -0.5548999786E+01        ...         0.1375607300E+08
1  -0.1823500061E+02        ...         0.6878036500E+07
2  -0.6650000215E+00        ...         0.5086381000E+07
3  -0.9671999931E+01        ...         0.2657306000E+08
4  -0.1321700001E+02        ...         0.8595105000E+07
5  -0.1152099991E+02        ...         0.2615907200E+08