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