Pandas : créer un DataFrame à partir d’un dict avec différentes longueurs



Vous pouvez utiliser la syntaxe de base suivante pour créer un DataFrame pandas à partir d’un dictionnaire dont les entrées ont des longueurs différentes :

import pandas as pd

df = pd.DataFrame(dict([(key, pd.Series(value)) for key, value in some_dict.items()]))

Cette syntaxe convertit une liste de tableaux du dictionnaire en une liste de séries pandas.

Cela nous permet de créer un DataFrame pandas et de remplir simplement les valeurs NaN pour garantir que chaque colonne du DataFrame résultant a la même longueur.

L’exemple suivant montre comment utiliser cette syntaxe dans la pratique.

Exemple : créer un DataFrame Pandas à partir d’un dict avec différentes longueurs

Supposons que nous ayons le dictionnaire suivant contenant des entrées de différentes longueurs :

#create dictionary whose entries have different lengths
some_dict = dict(A=[2, 5, 5, 7, 8], B=[9, 3], C=[4, 4, 2])

#view dictionary
print(some_dict)

{'A': [2, 5, 5, 7, 8], 'B': [9, 3], 'C': [4, 4, 2]}

Si nous essayons d’utiliser la fonction from_dict() pour convertir ce dictionnaire en DataFrame pandas, nous recevrons une erreur :

import pandas as pd

#attempt to create pandas DataFrame from dictionary
df = pd.DataFrame.from_dict(some_dict)

ValueError: All arrays must be of the same length

Nous recevons une erreur nous indiquant que tous les tableaux du dictionnaire doivent avoir la même longueur.

Pour contourner cette erreur, nous pouvons utiliser la syntaxe suivante pour convertir le dictionnaire en DataFrame :

import pandas as pd

#create pandas DataFrame from dictionary
df = pd.DataFrame(dict([(key, pd.Series(value)) for key, value in some_dict.items()]))

#view DataFrame
print(df)

   A    B    C
0  2  9.0  4.0
1  5  3.0  4.0
2  5  NaN  2.0
3  7  NaN  NaN
4  8  NaN  NaN

Notez que nous sommes en mesure de créer avec succès un DataFrame pandas et que les valeurs NaN sont remplies pour garantir que chaque colonne a la même longueur.

Si vous souhaitez remplacer ces valeurs NaN par d’autres valeurs (telles que zéro), vous pouvez utiliser la fonction replace() comme suit :

#replace all NaNs with zeros
df.replace(np.nan, 0, inplace=True)

#view updated DataFrame
print(df)

   A    B    C
0  2  9.0  4.0
1  5  3.0  4.0
2  5  0.0  2.0
3  7  0.0  0.0
4  8  0.0  0.0

Notez que chaque valeur NaN a été remplacée par zéro.

N’hésitez pas à utiliser la fonction replace() pour remplacer les valeurs NaN par la valeur de votre choix.

Ressources additionnelles

Les didacticiels suivants expliquent comment effectuer d’autres opérations courantes dans les pandas :

Pandas : Comment convertir un DataFrame en dictionnaire
Pandas : Comment renommer des colonnes avec un dictionnaire
Pandas : comment remplir des valeurs NaN à l’aide d’un dictionnaire

Ajouter un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *