web-dev-qa-db-fra.com

python pandas aplatir une trame de données dans une liste

J'ai un df comme ça:

import pandas
a=[['1/2/2014', 'a', '6', 'z1'], 
   ['1/2/2014', 'a', '3', 'z1'], 
   ['1/3/2014', 'c', '1', 'x3'],
   ]
df = pandas.DataFrame.from_records(a[1:],columns=a[0])

Je veux aplatir le df pour qu'il soit une liste continue comme ceci:

['1/2/2014', 'a', '6', 'z1', '1/2/2014', 'a', '3', 'z1','1/3/2014', 'c', '1', 'x3']

Je peux parcourir les lignes et extend vers une liste, mais est-ce un moyen beaucoup plus simple de le faire?

37
jason

Vous pouvez simplement utiliser .flatten() sur le DataFrame:

df.values.flatten()

et vous pouvez également ajouter .tolist() si vous voulez que le résultat soit un Python list.

65
Saullo G. P. Castro

Peut-être utiliser pile ?

df.stack().values
array(['1/2/2014', 'a', '3', 'z1', '1/3/2014', 'c', '1', 'x3'], dtype=object)

( Edit: Par ailleurs, le DF dans le Q utilise la première ligne comme étiquettes, c'est pourquoi ils sont pas dans la sortie ici.)

11
meloncholy

Vous pouvez essayer avec numpy

import numpy as np
np.reshape(df.values, (1,df.shape[0]*df.shape[1]))
2
Chitrasen