0
votes

créer un DataFrame à partir de la boucle for

J'ai défini une fonction pour créer un dataframe, mais j'obtiens deux listes dans chaque colonne, comment pourrais-je obtenir chaque élément de la liste comme une ligne distincte dans le dataframe comme indiqué ci-dessous.

            number         operation
    0          1              8
    1          2              16
    2          3              24 
    3          4              34

Résultat:

       number          operation
0   [1, 2, 3, 4]    [8, 16, 24, 32]

Ce que je veux vraiment:

a = [1, 2, 3, 4]

def function():
  result = []
  
  for i in range(0, len(a)):
    number = [i for i in a]
    operation = [8*i for i in a]

    result.append({'number': number, 'operation': operation})

    df = pd.DataFrame(result, columns=['number','operation'])
        
        return df
    
function()

Quelqu'un peut-il m'aider s'il vous plaît? :)


0 commentaires

3 Réponses :


2
votes

Vos problèmes sont doubles, premièrement, vous insérez la liste entière de valeurs (au lieu de la valeur "courante") dans le tableau de résultats à chaque passage dans votre boucle for, et deuxièmement vous écrasez la dataframe à chaque fois. Il serait plus simple d'utiliser une compréhension de liste pour générer les valeurs du dataframe:

   number  operation
0       1          8
1       2         16
2       3         24
3       4         32

Sortie:

import pandas as pd
 
a = [1, 2, 3, 4]
 
def function():
    result = [{'number' : i, 'operation' : 8*i} for i in a]
    df = pd.DataFrame(result)
    return df
 
print(function())


1 commentaires

@saraycamargo pas de soucis - je suis heureux d'avoir pu aider.



1
votes
import numpy as np

a = [1, 2, 3, 4]

def function():
    
  
    for i in range(0, len(a)):
            number = [i for i in a]
            operation = [8*i for i in a]

    v=np.rot90(np.array((number,operation)))
    result=np.flipud(v)

    df = pd.DataFrame(result, columns=['number','operation'])
        
    return df
    
print (function())

   number  operation
0       1          8
1       2         16
2       3         24
3       4         32

0 commentaires

1
votes

Vous y êtes presque. Remplacez simplement number = [i for i in a] par number = a [i] et operation = [8 * i for i in a] code > avec operation = 8 * a [i]

(FYI: Pas besoin de créer un cadre de données pandas à l'intérieur de la boucle. Vous pouvez obtenir le même résultat avec la création de cadres de données pandas à l'extérieur de la boucle)

Reportez-vous au code ci-dessous:

a = [1, 2, 3, 4]
def function():
    
    result = []
    for i in range(0, len(a)):
        number = a[i]
        operation = 8*a[i]
        result.append({'number': number, 'operation': operation})

    df = pd.DataFrame(res, columns=['number','operation'])    
    return df

function()

number  operation
0   1   8
1   2   16
2   3   24
3   4   32


0 commentaires