число с плавающей точкой Python Panda округляется при преобразовании в строку - PullRequest
0 голосов
/ 24 сентября 2019

У меня есть этот CSV-файл

id,adset_id,source
1,,google
2,23843814084680281,facebook
3,,google
4,23843814088700279,facebook
5,23843704830370464,facebook

Моя проблема заключается в том, что я пытаюсь прочитать его с помощью panda, поскольку я не могу передать схему panda, которая выводит схему для столбца adset_id в значение float64 (посколькузначения NaN)

Так что, если я напишу это

import pandas as pd

df = pd.read_csv('/Users/test/Desktop/float.csv')
print(df)

, я получу научную запись для adset_id результата:

   id      adset_id    source
0   1           NaN    google
1   2  2.384381e+16  facebook
2   3           NaN    google
3   4  2.384381e+16  facebook
4   5  2.384370e+16  facebook

Я не смог найти никакого способачтобы исправить это, я попытался взломать и преобразовать это число в строку.Но для этого мне нужно сначала преобразовать его в int64, а затем преобразовать в строку.

import pandas as pd
import numpy as np

df = pd.read_csv('/Users/test/Desktop/float.csv')

df = df.fillna({'adset_id':-1})
df['adset_id'] = df['adset_id'].astype('int64')
df['adset_id'] = df['adset_id'].astype('str')
df['adset_id'].replace('-1', np.NaN, inplace=True)

print(df)

Результат:

   id           adset_id    source
0   1                NaN    google
1   2  23843814084680280  facebook
2   3                NaN    google
3   4  23843814088700280  facebook
4   5  23843704830370464  facebook

Как вы можетесм. 2 моих adset_id округления:
23843814084680281 -> 23843814084680280
23843814088700279 -> 23843814088700280

Я просто хочу иметь возможность читать этот CSV для пандыфрейм данных и не получите adset_id в качестве научной нотации, любое решение будет оценено

Ответы [ 2 ]

1 голос
/ 24 сентября 2019

В пределах pd.read_csv.Посмотрите на аргумент dtype.Вы можете установить словарь dtypes, чтобы обеспечить его чтение в виде строки.

df = pd.read_csv('PATH_TO_CSV.csv', dtype={'adset_id':str})

Вы также можете посмотреть на аргументы na_values, keep_default_na и na_filter, чтобы помочь с обработкой значений NULL

0 голосов
/ 24 сентября 2019

«Преобразование» в научную нотацию происходит в pandas в том, как она представляет данные.Попробуйте добавить следующий код сразу после импорта панд.

import pandas as pd
pd.options.display.float_format = '{:.2f}'.format
...