J'ai des tonnes de fichiers Excel. Chacun de ces fichiers contient une ou plusieurs variables pour tous les sujets à un certain moment. Pour chaque variable, j'ai, disons, 10 fichiers (en stockant la valeur de la variable à 10 moments différents). Mon but ultime est de créer une série de panneaux.Conversion de plusieurs DataFrames en Panel
Supposons qu'il n'y ait qu'une seule variable dans chaque fichier. Pour chaque variable (ou élément), j'initialise un DataFrame vide item = pd.DataFrame()
et successivement lire et ajouter tous les 10 fichiers dans ce DataFrame vide item = item.append(pd.DataFrame(df))
, où df provient du nouveau fichier. Chacune de ces 10 DataFrames a la cote 1 x #subjects
, donc j'ai finalement 10 x #subject
. Je transforme cela en un cadre de panneau en utilisant pf = pd.Panel({'variable name': item})
. Maintenant, je peux facilement ajouter à un grand cadre de panneau avec beaucoup d'autres articles ...
Question: Qu'est-ce qu'un moyen facile et pratique d'aborder ce problème si j'ai 2 ou plusieurs variables dans chaque fichier ? Si je collé à l'approche ci-dessus, j'aurais une dataframe de dimension #variables x #subjects
pour chaque fichier, conduisant à
subject1 subject2
variable1 2000 val val
variable2 2000 val val
variable1 2001 val val
variable2 2001 val val
...
après les annexant. C'est évidemment une mauvaise structure pour convertir cela en données de panel.
Je pourrais travailler autour de moi - par ex. en ajoutant "la ligne correcte" pour garder la structure appropriée ou lire le même fichier autant de fois qu'il y a de variables - mais cela serait lourd et/ou coûteux. Il doit y avoir des méthodes qui font ce travail facilement, mais je ne pouvais pas les trouver dans les docs.
Merci pour votre aide.
Sur la base de votre réponse, @Alton Campbell, je me suis ce que je voulais: je initialiser une dict vide 'data = {}', insérer les données de chaque année dans une boucle via 'data [année] = df' (où df est le DataFrame d'une année à ajouter), configurer un panel' item = pd.Panel (data) 'et permuter les axes' item = item.swapaxes (axis1 = 'items', axis2 = 'majeur') '(car je veux que les années soient sur l'axe principal en accord avec les docs). Merci! – Jhonny