2013-02-11 208 views
15

我有一個Python數據框有多列。將python數據框轉換爲列表

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] 

我想查找與LogBlk = 0和Page = 0關聯的BayFails。

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

這將返回[0,1,8,9]

我想要做的是轉換這個pandas.series到一個列表。有誰知道這是怎麼做到的嗎?

回答

30

pandas.Series,有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] 

技術說明:在我原來的答覆我說,Series是的numpy.ndarray子類,並繼承了其tolist方法。對於Pandas版本0.12或更高版本,這是正確的,在即將發佈的Pandas 0.13版中,Series已被重構爲NDFrame的子類。 Series仍然有一個tolist方法,但它與同名的numpy.ndarray方法沒有直接關係。

+0

有爲什麼tolist()打破了Python方法的命名約定一個特別的原因? DataFrame的等價方法是to_list(),我相信。 – 2014-09-15 17:41:49

+0

@HenryHenrinson:在過去,Pandas系列是NumPy ndarrays的一個子類。 'ndarrays'有一個['tolist'方法](http://docs.scipy.org/doc/numpy/reference/generated/numpy.ndarray.tolist.html)。系列'tolist'方法[*覆蓋* ndarray方法](https://github.com/pydata/pandas/issues/2447)以不同的方式處理datetime64s。因此,命名約定中的中斷是NumPy命名約定的延伸。你說得對,現在它應該是'to_list'以符合所有其他的Series和DataFrame'to_ *'方法。 – unutbu 2014-09-15 18:34:07

4

您也可以將它們轉換爲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