2016-04-11 11 views
7

sto sto cercando di chiamare la funzione to_dict sul seguente dataframe:Pandas to_dict cambia tipo indice con outtype = 'record'

panda importazione come pd

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

df = pd.DataFrame (dati)

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}] 

Tuttavia il problema si verifica se si esegue un'operazione galleggiante sul dataframe, che muta l'indice in un galleggiante:.

(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}] 

qualcuno può spiegare il comportamento sopra o consigliare una soluzione, o di verificare se questo potrebbe essere un bug panda? Nessuno degli altri outtype nel metodo to_dict modifica l'indice come mostrato sopra.

ho replicato questo su entrambi i panda 0.14 e 0.18 (l'ultima)

Molte grazie!

+2

Questo appare come un insetto si dovrebbe presentare una segnala [qui] (https://github.com/pydata/pandas/issues) – EdChum

risposta

0

Questa domanda è stato risposto su github here

io trasmettere la risposta qui quindi la domanda può essere contrassegnato come risolto e si è trasferito fuori dalla top-lista di domande senza risposta panda.

Da Github:

Niente a che vedere con l'indice, solo il fatto che avete dtypes galleggiante nei dati

Se si guarda al code, usiamo DataFrame.values, che restituisce un array NumPy, che deve avere un singolo dtype (float64 in questo caso).

- TomAugspurger

Una soluzione per il problema sarebbe:

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

che genera un elenco di oggetti 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)])] 
Problemi correlati