web-dev-qa-db-fra.com

Comment générer une liste à partir d'un pandas DataFrame avec le nom de la colonne et ses valeurs?

J'ai un objet dataframe pandas qui ressemble à ceci:

   one  two  three  four  five
0    1    2      3     4     5
1    1    1      1     1     1

J'aimerais générer une liste d'objets de liste dont le premier élément est l'étiquette de colonne et les valeurs de liste restantes sont les valeurs de données de colonne:

nested_list = [['one', 1, 1]
               ['two', 2, 1]
               ['three', 3, 1]
               ['four', 4, 1]
               ['five', 5, 1]]

Comment puis-je faire ceci? Merci pour l'aide.

17
turtle

Le moyen le plus simple est probablement list(dt.T.itertuples()) (où dt est votre cadre de données). Cela génère une liste de tuples.

35
BrenBarn

La réponse @BrenBarn ci-dessus donne une liste de n-uplets et non une liste telle que posée dans la question. J'avais spécifiquement besoin d'une liste de listes pour pouvoir écrire le cadre de données dans spreadsheed à l'aide de DataNitro. Adapté de l'exemple ci-dessus avec compréhension de la liste:

[list(x) for x in dt.T.itertuples()]

Cela donne le résultat au besoin

10
Joop

Strictement parlant si vous voulez des listes imbriquées (et non une liste de tuples), vous pouvez le faire

df.values.tolist()

as df.values ​​est un tableau numpy. Cela vous donnera une liste de listes comme demandé:

[[0.0001313652121930252, 3.5915356549999985e-05], 
 [3.5915356549999985e-05, 0.00011634321240684215]]
5
bobleponge

Mon approche naïve consisterait à utiliser des éléments d’itère avec 'll' comme liste de listes et l comme liste unique.

df = DataFrame({'one':[1,1], 'two':[2,1], 'three':[3,1], 'four':[3,1] })

ll = []

for idx,row in df.iteritems():
    l = row.values.tolist()
    l.insert(0,idx)
    ll.append(l)
3
THM

Vieille question que je connais, mais cela me semble plus logique que ces autres réponses.

S'il s'agit de votre cadre de données:

df = pd.DataFrame({'one': [1, 1], 'three': [3, 1], 'four': [4, 1],
           'five': [5, 1], 'two': [2, 1]},
          columns=['one', 'two', 'three', 'four', 'five'])

Faire ceci:

df.T.reset_index().values.tolist()

Résultat

[['one', 1, 1], ['two', 2, 1], ['three', 3, 1], ['four', 4, 1], ['five', 5, 1]]
0
Jarad