J'ai un fichier de données avec un multididex dans les colonnes et souhaitez utiliser des dictionnaires pour ajouter de nouvelles lignes.
Disons que chaque rangée du Dataframe est une ville. Les colonnes contiennent des "distance" et "véhicule". Et chaque cellule serait le pourcentage de la population qui choisit ce véhicule pour cette distance. P>
Je construisez un index comme celui-ci: p> alors Je crée un Dataframe: p> La structure du Dataframe a l'air bien. Bien que Pandas ait ajouté des nans comme valeurs par défaut? P> Maintenant, je voudrais mettre en place un dictionnaire pour la nouvelle ville et ajouter Il: p> mais cela échoue: p> ValueError: la longueur des valeurs ne correspond pas à la longueur de l'index p>
BlockQuote> Voici la complète Message d'erreur (Pastebin) P> < Strong> Mise à jour: strong> p> Merci pour toutes les bonnes réponses. J'ai bien peur que j'ai simplifié le problème dans mon exemple. En fait, mon indice est imbriqué de 3 niveaux (et cela pourrait devenir plus). P> J'ai donc accepté la réponse universelle de convertir mon dictionnaire dans une liste de tuples. Cela pourrait ne pas être aussi propre que les autres approches, mais fonctionne pour toute configuration multididex. P> p>
5 Réponses :
Je ne pense pas que vous ayez même besoin d'initialiser un fichier de données vide. Avec votre d code>, je peux obtenir la sortie souhaitée avec
instable code> et une transposition:
Vous pouvez vous ajouter à votre image de données comme ceci: sortie: p> L'astuce consiste à créer la ligne de Dataframe avec de_dict code> puis ou si vous ne voulez pas créer le fichier de données vide, vous pouvez d'abord utiliser cette méthode pour créer le fichier de données avec les nouvelles données. P> instable code> pour obtenir la structure de votre fichier de données d'origine avec des colonnes multiindex, puis
renommer code> pour obtenir index et
ANNEXE code>. p>
dataframe.append(pd.DataFrame.from_dict(my_home_city).unstack().rename('my_home_city'))
distance near far
vehicle bike car bike car
city NaN NaN NaN NaN
my_home_city 1 0 0 1
Multi Index est une liste Plus d'infos p> de code> de
tuple code>, nous devons simplement modifier votre
dict code>, puis nous pourrions attribuer directement la valeur
d
Out[995]:
{('far', 'bike'): 0,
('far', 'car'): 1,
('near', 'bike'): 1,
('near', 'car'): 0}
df.columns.values
Out[996]: array([('near', 'bike'), ('near', 'car'), ('far', 'bike'), ('far', 'car')], dtype=object)
Initialisez votre Dataframe vide à l'aide de multididex.from_product code>.
>>> df.append(pd.DataFrame(my_home_city).unstack().to_frame('my_home_city').T)
far near
bike car bike car
city
my_home_city 0 1 1 0
Je pense que les clés de la diction doivent être des tuples, par exemple,
{('près', 'vélo'): 1, ('près', 'voiture'): 0 ...} code>
Remarque côté: Checkout
pandas.multidex.from_product code>