Pandas to dict изменяет тип индекса с outtype= 'records'

Я пытаюсь вызвать функцию to_dict в следующем фрейме данных:

импорт панд как pd

data = {"a": [1,2,3,4,5]," b": [90,80,40,60,30]}

df = pd.DataFrame (data)

   a   b
0  1  90
1  2  80
2  3  40
3  4  60
4  5  30

df.reset_index ().to_dict ("r")

[{'a': 1, 'b': 90, 'index': 0},
 {'a': 2, 'b': 80, 'index': 1},
 {'a': 3, 'b': 40, 'index': 2},
 {'a': 4, 'b': 60, 'index': 3},
 {'a': 5, 'b': 30, 'index': 4}]

однако моя проблема возникает, если я выполняю операцию float на фрейме данных, который мутирует индекс в float:

(df*1.0).reset_index ().to_dict ("r")

[{'a': 1.0, 'b': 90.0, 'index': 0.0},  
{'a': 2.0, 'b': 80.0, 'index': 1.0},  
{'a': 3.0, 'b': 40.0, 'index': 2.0},  
{'a': 4.0, 'b': 60.0, 'index': 3.0},  
{'a': 5.0, 'b': 30.0, 'index': 4.0}]

может ли кто-нибудь объяснить вышеуказанное поведение или рекомендовать обходной путь или проверить, может ли это быть ошибкой панды? Ни один из других outtypes в методе to_dict не мутирует индекс, как показано выше.

я воспроизвел это на панд 0.14 и 0.18 (последний)

большое спасибо!

1 ответов


на этот вопрос был дан ответ на github здесь

Я передам ответ здесь, так что вопрос может быть помечен как решенный и убран из верхнего списка вопросов без ответов панд.

Из Github:

ничего общего с индексом, просто тот факт, что у вас есть какие-либо плавающие dtypes в data

Если вы посмотрите на код, мы используем DataFrame.значения, возвращающие массив NumPy, который должен иметь один dtype (float64 в этом случае).

--TomAugspurger

решение проблемы:

[x._asdict() for x in df.itertuples()]

, который генерирует список объектов OrderedDict

[OrderedDict([('Index', 0), ('a', 1.0), ('b', 90)]),
 OrderedDict([('Index', 1), ('a', 2.0), ('b', 80)]),
 OrderedDict([('Index', 2), ('a', 3.0), ('b', 40)]),
 OrderedDict([('Index', 3), ('a', 4.0), ('b', 60)]),
 OrderedDict([('Index', 4), ('a', 5.0), ('b', 30)])]