我有一个文本文件,其中包含许多用科学计数法表示的值。但是,不是用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
答案 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