Научная нотация Python - конвертировать D в E - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть текстовый файл с большим количеством значений, которые находятся в научной записи.Однако вместо написания научных обозначений в терминах 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 голосов
/ 26 февраля 2019

Вы можете использовать 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
0 голосов
/ 26 февраля 2019

Попробуйте sed заменить все D на E в файле.Сделайте это перед разбором файла с python.

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

Если вы хотите сохранить это в python, попробуйте это решение https://stackoverflow.com/a/11332274/5196039

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...