dtype изменяется при использовании DataFrame.to_dict

У меня есть столбец uint64 в моем DataFrame, но когда я конвертирую этот DataFrame в список python dict, используя DataFrame.to_dict('record') , то, что ранее uint64 получает волшебным образом преобразуется в float:

 In [24]: mid['bd_id'].head() Out[24]: 0 0 1 6957860914294 2 7219009614965 3 7602051814214 4 7916807114255 Name: bd_id, dtype: uint64 In [25]: mid.to_dict('record')[2]['bd_id'] Out[25]: 7219009614965.0 In [26]: bd = mid['bd_id'] In [27]: bd.head().to_dict() Out[27]: {0: 0, 1: 6957860914294, 2: 7219009614965, 3: 7602051814214, 4: 7916807114255} 

Как я могу избежать этого странного поведения?

Обновить

как ни странно, если я использую to_dict() вместо to_dict('records') , столбец bd_id будет иметь тип int:

 In [43]: mid.to_dict()['bd_id'] Out[43]: {0: 0, 1: 6957860914294, 2: 7219009614965, ... 

2 Solutions collect form web for “dtype изменяется при использовании DataFrame.to_dict”

Это потому, что в другом столбце есть float. Более конкретно to_dict('records') реализуется с использованием атрибута values для фрейма данных, а не для самих столбцов, и это реализует «неявное повышение», в вашем случае конвертирование uint64 в float.

Если вы хотите обойти эту ошибку, вы можете явно указать свою фреймворк данных в тип данных object :

 df.astype(object).to_dict('record')[2]['bd_id'] Out[96]: 7602051814214 

Кстати, если вы используете IPython и хотите посмотреть, как функция реализована в библиотеке, вы можете ее разгрузить, поставив ?? в конце вызова метода. Для pd.DataFrame.to_dict?? мы видим

  ... elif orient.lower().startswith('r'): return [dict((k, v) for k, v in zip(self.columns, row)) for row in self.values] 

Вы можете использовать это

 from pandas.io.json import dumps import json output=json.loads(dumps(mid,double_precision=0)) 
  • Как подавить предупреждение matplotlib?
  • pandas dataframe view vs copy, как мне сказать?
  • Как указать индекс dtype при чтении csv-файла в DataFrame?
  • Чтение файла с разделителями табуляции с помощью Pandas - работает в Windows, но не на Mac
  • Python pandas преобразует список разделенных запятыми значений в dataframe
  • Панды: Назначенные задания
  • Python Pandas DataFrame to_csv странный формат
  • Довольно печатать новые строки внутри строки в Pandas DataFrame
  • Python - лучший язык программирования в мире.