16

I have a Python dataFrame with multiple columns.

  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]  

I want to find BayFails that is associated with LogBlk=0, and Page=0.

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

This will return [0,1,8,9]

What I want to do is to convert this pandas.series into a list. Does anyone know how to do that?

unutbu
  • 842,883
  • 184
  • 1,785
  • 1,677
user1452849
  • 239
  • 1
  • 2
  • 3

2 Answers2

37

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

Technical note: In my original answer I said that Series was a subclass of numpy.ndarray and inherited its tolist method. While that's true for Pandas version 0.12 or older, In the soon-to-be-released Pandas version 0.13, Series has been refactored to be a subclass of NDFrame. Series still has a tolist method, but it has no direct relationship to the numpy.ndarray method of the same name.

unutbu
  • 842,883
  • 184
  • 1,785
  • 1,677
  • Is there a particular reason why tolist() breaks the naming convention for python methods? DataFrame's equivalent method is to_list(), I believe. – Henry Henrinson Sep 15 '14 at 17:41
  • @HenryHenrinson: In the old days, Pandas Series were a subclass of NumPy ndarrays. `ndarrays` have a [`tolist` method](http://docs.scipy.org/doc/numpy/reference/generated/numpy.ndarray.tolist.html). The Series `tolist` method [*overrode* the ndarray method](https://github.com/pydata/pandas/issues/2447) to handle datetime64s differently. So the break in naming convention is a hang-over from NumPy's naming convention. You are right that nowadays it should be `to_list` to conform with all the other Series and DataFrame `to_*` methods. – unutbu Sep 15 '14 at 18:34
3

You can also convert them to 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