2017-09-11 14 views
2

ich ein Pandas Datenrahmen haben strukturiert wie:Python Pandas Objekt wandelt Spaltennamen mit Sonderzeichen

>>> df 
    Col1 Col.With.Dots Col.With.# Col.With.% 
0 text   111   111   111 
1 text   222   222   222 
2 text   333   333   333 
3 text   444   444   444 
4 text   555   555   555 

Wenn darüber mit itertuples() Iterieren, die Säulen mit Sonderzeichen Pause:

>>> for i in df.itertuples(): 
... print i 

Pandas(Index=0, Col1='text', _2=111, _3=111, _4=111) 
Pandas(Index=1, Col1='text', _2=222, _3=222, _4=222) 
Pandas(Index=2, Col1='text', _2=333, _3=333, _4=333) 
Pandas(Index=3, Col1='text', _2=444, _3=444, _4=444) 
Pandas(Index=4, Col1='text', _2=555, _3=555, _4=555) 

"_2", "_3", "_4" sollten in der Druckausgabe "Col.With.Dots", "Col.With. #", "Col.With.%" Sein.

Ich muss den Datenrahmen Objekt zu einem rohen dict konvertieren. So wird jedes Pandas-Objekt in ein Diktat wie zum Beispiel: {'Col1': 'text', 'Col.With.Dots': 111, 'Col.With.#': 111, 'Col.With.%': 111 }

geändert. Gibt es einen Weg, dies zu überwinden? Ich habe einige Nachforschungen und keine Antwort

+2

Sie _broken_ nicht finden konnten, sie _fixed_ sind. 'Col.With.Dots' und dergleichen sind keine gültigen Python-Bezeichner. Die Pandas tun ihr Bestes, um sie zu meiden. – DyZ

+0

@DYZ Ich verstehe das, aber ich muss diese Struktur zu einem rohen dict konvertieren – Vinny

+0

Warum nicht die Spalten umbenennen? – Asterisk

Antwort

1

Verwenden to_dict()

In [1659]: df.to_dict('r') 
Out[1659]: 
[{'Col.With.#': 111L, 'Col.With.%': 111L, 'Col.With.Dots': 111L, 'Col1': 'text'}, 
{'Col.With.#': 222L, 'Col.With.%': 222L, 'Col.With.Dots': 222L, 'Col1': 'text'}, 
{'Col.With.#': 333L, 'Col.With.%': 333L, 'Col.With.Dots': 333L, 'Col1': 'text'}, 
{'Col.With.#': 444L, 'Col.With.%': 444L, 'Col.With.Dots': 444L, 'Col1': 'text'}, 
{'Col.With.#': 555L, 'Col.With.%': 555L, 'Col.With.Dots': 555L, 'Col1': 'text'}] 

Oder für Looping, verwenden df.iterrows() mit to_dict()

In [1667]: for i, x in df.iterrows(): 
     ...:  print x.to_dict() 
     ...: 
{'Col.With.%': 111L, 'Col.With.Dots': 111L, 'Col.With.#': 111L, 'Col1': 'text'} 
{'Col.With.%': 222L, 'Col.With.Dots': 222L, 'Col.With.#': 222L, 'Col1': 'text'} 
{'Col.With.%': 333L, 'Col.With.Dots': 333L, 'Col.With.#': 333L, 'Col1': 'text'} 
{'Col.With.%': 444L, 'Col.With.Dots': 444L, 'Col.With.#': 444L, 'Col1': 'text'} 
{'Col.With.%': 555L, 'Col.With.Dots': 555L, 'Col.With.#': 555L, 'Col1': 'text'} 
+0

Das funktioniert gut, danke. BTW - gibt es eine Möglichkeit, die Werte von Float zu Int vor der Konvertierung zu ändern? – Vinny

Verwandte Themen