2015-01-18 15 views
38

Es ist einfach eine Liste von Listen in eine Pandas Datenrahmen zu drehen:Pandas Datenrahmen zu den Listen Liste

import pandas as pd 
df = pd.DataFrame([[1,2,3],[3,4,5]]) 

Aber wie schalte ich wieder in eine Liste von Listen df?

lol = df.what_to_do_now? 
print lol 
# [[1,2,3],[3,4,5]] 
+3

lol bei lol variabel –

Antwort

67

Sie könnten die zugrunde liegende Array zugreifen und rufen seine tolist Methode:

>>> df = pd.DataFrame([[1,2,3],[3,4,5]]) 
>>> lol = df.values.tolist() 
>>> lol 
[[1L, 2L, 3L], [3L, 4L, 5L]] 
+0

Perfekt. Vielen Dank! – bumpkin

+0

Warum sind 'L' in der Ausgabe angehängt? –

+1

L bedeutet lange, im Gegensatz zu int. – user48956

2

Ich weiß nicht, ob es Ihren Bedürfnissen passt, aber Sie können auch tun:

>>> lol = df.values 
>>> lol 
array([[1, 2, 3], 
     [3, 4, 5]]) 

Dies ist nur ein numpliges Array aus dem ndarray-Modul, mit dem Sie alle üblichen numply array-Dinge machen können.

3

Wenn die Daten Spalten- und Indexbeschriftungen haben, die Sie beibehalten möchten, gibt es einige Optionen.

Beispieldaten:

>>> df = pd.DataFrame([[1,2,3],[3,4,5]], \ 
     columns=('first', 'second', 'third'), \ 
     index=('alpha', 'beta')) 
>>> df 
     first second third 
alpha  1  2  3 
beta  3  4  5 

Die tolist() Verfahren in anderen Antworten beschrieben nützlich ist, sondern liefert nur die Kerndaten - das ist nicht genug sein kann, je nach Bedarf.

>>> df.values.tolist() 
[[1, 2, 3], [3, 4, 5]] 

Ein Ansatz ist es, die DataFrame zu konvertieren JSon df.to_json() verwenden und es dann erneut zu analysieren. Dies ist umständlich, hat aber einige Vorteile, da die Methode einige nützliche Optionen bietet.

Umständlich aber kann nützlich sein.

Die gute Nachricht ist, dass es ziemlich einfach ist Listen für die Spalten und Zeilen zu bauen:

>>> columns = [df.index.name] + [i for i in df.columns] 
>>> rows = [[i for i in row] for row in df.itertuples()] 

Dies ergibt:

>>> print(f"columns: {columns}\nrows: {rows}") 
columns: [None, 'first', 'second', 'third'] 
rows: [['alpha', 1, 2, 3], ['beta', 3, 4, 5]] 

Wenn der None wie der Name des Index lästig ist, benennen sie es:

df = df.rename_axis('stage') 

Dann:

>>> columns = [df.index.name] + [i for i in df.columns] 
>>> print(f"columns: {columns}\nrows: {rows}") 

columns: ['stage', 'first', 'second', 'third'] 
rows: [['alpha', 1, 2, 3], ['beta', 3, 4, 5]] 
+0

Wenn Sie einen Multilevel-Index haben, ist das Index-Tupel das erste Element der generierten Zeilen. Sie brauchen einen weiteren Schritt, um es zu teilen. – Konstantin

Verwandte Themen