12

I have a pandas dataframe that I convert to numpy array as follows:

df.values

which gives the following output:

array([[2],
       [0],
       [1],
       ..., 
       [0],
       [1],
       [0]], dtype=int64)

However I want to obtain the list as follows:

[0, 2, 3]

Any idea how to do this?

Pau Folch Codera
  • 123
  • 1
  • 1
  • 4

2 Answers2

18

Maybe you can use iloc or loc for selecting column and then tolist:

print df
   a
0  2
1  0
2  1
3  0
4  1
5  0

print df.values
[[2]
 [0]
 [1]
 [0]
 [1]
 [0]]

print df.iloc[:, 0].tolist()
[2, 0, 1, 0, 1, 0]

Or maybe:

print df.values.tolist()
[[2L], [0L], [1L], [0L], [1L], [0L]]

print df.iloc[:, 0].values.tolist()
[2L, 0L, 1L, 0L, 1L, 0L]

print df.loc[:, 'a'].tolist()
[2, 0, 1, 0, 1, 0]

print df['a'].tolist()
[2, 0, 1, 0, 1, 0]

But maybe you need flatten:

print df.values.flatten()
[2 0 1 0 1 0]

print df.iloc[:, 0].values.flatten()
[2 0 1 0 1 0]
jezrael
  • 822,522
  • 95
  • 1,334
  • 1,252
4

Looks like you have a dataframe with one column and several rows. Remember that this is a two dimensional array, you have to slice the first column then list the values within that column.

This should do it:

df[0].values.tolist()

df[0] - This selects all values in the first column. For the second column you'd use df[1] third df[2] and so on.

You can tell the shape of your dataframe by running df.shape. This will tell you how many rows and columns exist in your dataframe e.g. (9,1) which means 9 rows and 1 column

Okezie
  • 5,012
  • 3
  • 26
  • 27