3 цифры усекаются из 18-значного столбца, когда я сохраняю свой кадр данных pandas в виде файла csv - PullRequest
0 голосов
/ 26 июня 2019

Я создал фрейм данных из словаря, заполненного файлом JSON.Столбец "id" в моем фрейме данных содержит целое число из 18 цифр.Когда я печатаю идентификаторы с использованием python, значение равно исходному значению в файле JSON, но когда я пытаюсь сохранить свой фрейм данных в виде файла csv, столбец id сохраняется в научной нотации, а также три цифры в правой части идентификаторов.конвертируется в ноль.Как я могу предотвратить преобразование значения id в научную запись в файле csv?

Например, я получаю 1.01045E+17 для id при просмотре csv и при просмотре значенияЯ получаю 101044874404577000, в то время как истинное значение равно 101044874404577281

Это мой код:

with open(data_path, encoding="utf8") as input_file:
    data = json.load(input_file)
df = pd.DataFrame.from_dict(data)
df.to_csv(output_path)

Я попытался изменить формат столбца с astype на str, object и float64, но это не помогло.Я установил float_format аргумент функции to_csv для сохранения плавающих чисел с указанным количеством десятичных знаков.Это тоже не сработало.

1 Ответ

0 голосов
/ 26 июня 2019

Проблема не в преобразовании в CSV, а в том, что вы загружаете его в электронную таблицу.Известно, что Excel плохо поддерживает CSV-файлы, и, к сожалению, LibreOffice calc делает все возможное, чтобы эмулировать Excel ...

Он видит число и неправильно конвертирует его в двойное значение.

Демо:

В питоне:

>>> x = 101044874404577281
>>> data = [{"id": x, "str": "foo"}]
>>> fd = io.StringIO()
>>> json.dump(data, fd)
>>> fd.seek(0,0)
0
>>> df = pd.read_json(fd)
>>> print(df)
                   id  str
0  101044874404577281  foo

Хорошо, здесь все хорошо.Давайте продолжим:

>>> df.to_csv('foo.csv', index=False)

Если файл foo.csv открыт в немом текстовом редакторе, если он все еще в порядке:

id,str
101044874404577281,foo

Давайте загрузим это в электронную таблицу:

enter image description here

Позор калькулятору, это помещено в научную нотацию!Давайте использовать обычный дисплей:

enter image description here

Вздох ... он уничтожил последние цифры ...

TL / DR: Этоне является проблемой в Python, ни в пандах, ни даже с файлом CSV, но только с Excel.

...