2013-02-11 16 views
15

Ich habe einen Python-Datenrahmen mit mehreren Spalten.Python-Datenrahmen in eine Liste konvertieren

LogBlk Page         BayFail  
    0   0         [0, 1, 8, 9] 
    1   16   [0, 1, 4, 5, 6, 8, 9, 12, 13, 14] 
    2   32   [0, 1, 4, 5, 6, 8, 9, 12, 13, 14] 
    3   48   [0, 1, 4, 5, 6, 8, 9, 12, 13, 14] 

Ich möchte BayFails finden, die mit LogBlk = 0 und Page = 0 zugeordnet ist.

df2 = df[ (df['Page'] == 16) & (df['LogBlk'] == 0) ]['BayFail'] 

Dies wird return [0,1,8,9]

Was ich tun möchte, ist dies in eine Liste zu konvertieren pandas.series. Weiß jemand, wie man das macht?

Antwort

30

pandas.Series, hat eine tolist method:

In [10]: import pandas as pd 

In [11]: s = pd.Series([0,1,8,9], name = 'BayFail') 

In [12]: s.tolist() 
Out[12]: [0L, 1L, 8L, 9L] 

Technische Anmerkung: In meiner ursprünglichen Antwort sagte ich, dass Series eine Unterklasse von numpy.ndarray war und erbte seine tolist Methode. Das gilt für die Pandas-Version 0.12 oder älter. In der bald veröffentlichten Pandas-Version 0.13 wurde Series als eine Unterklasse von NDFrame umgestaltet. Series hat immer noch eine tolist Methode, aber es hat keine direkte Beziehung zu der numpy.ndarray Methode mit dem gleichen Namen.

+0

Gibt es einen bestimmten Grund, warum ToList() für Python Methoden der Namenskonvention bricht? Die äquivalente Methode von DataFrame ist to_list(), glaube ich. –

+0

@HenryHenrinson: In den alten Tagen waren Pandas-Serie eine Unterklasse von NumPy ndarrays. 'ndarrays' haben eine [' tolist' Methode] (http://docs.scipy.org/doc/numpy/reference/generated/numpy.darray.tolist.html). Die "tolist" -Methode der Serie [* überschrieb * die ndarray-Methode] (https://github.com/pydata/pandas/issues/2447), um datetime64s anders zu behandeln. Die Namenskonvention ist also ein Bruchteil der Namenskonvention von NumPy. Sie haben Recht, dass es heutzutage "to_list" sein sollte, um mit allen anderen Methoden von Series and DataFrame to_ * 'konform zu sein. – unutbu

4

Sie können sie auch konvertieren numpy arrays

In [124]: s = pd.Series([0,1,8,9], name='BayFail') 

In [125]: a = pd.np.array(s) 
Out[125]: array([0, 1, 8, 9], dtype=int64) 

In [126]: a[0] 
Out[126]: 0 
Verwandte Themen