Disons que j'ai un dictionnaire avec 10 paires clé-valeur. Chaque entrée contient un tableau numpy. Cependant, la longueur du tableau n'est pas la même pour tous.
Comment créer un dataframe dans lequel chaque colonne contient une entrée différente?
Quand j'essaye:
pd.DataFrame(my_dict)
Je reçois:
ValueError: arrays must all be the same length
Un moyen de surmonter cela? Je suis heureux que Pandas utilise NaN
pour remplir ces colonnes pour les entrées plus courtes.
pd.Series(...)
(en supposantimport pandas as pd
dans la section d'importation)pd.DataFrame({k: pd.Series(l) for k, l in d.items()})
Voici un moyen simple de le faire:
la source
columns
mais c'est déjà la valeur par défaut. Voir la documentation des pandas - pandas.DataFrame.from_dictVous trouverez ci-dessous un moyen de ranger votre syntaxe, tout en faisant essentiellement la même chose que ces autres réponses:
Une syntaxe similaire existe également pour les listes:
Une autre syntaxe pour les listes est:
Vous devrez peut-être en outre transposer le résultat et / ou modifier les types de données de la colonne (flottant, entier, etc.).
la source
Bien que cela ne réponde pas directement à la question du PO. J'ai trouvé que c'était une excellente solution pour mon cas lorsque j'avais des tableaux inégaux et que j'aimerais partager:
de la documentation pandas
la source
Vous pouvez également utiliser
pd.concat
ainsiaxis=1
une liste d'pd.Series
objets:la source
Les deux lignes suivantes fonctionnent parfaitement:
Mais avec% timeit sur Jupyter, j'ai un rapport de vitesse 4x pour B vs A, ce qui est assez impressionnant, surtout lorsque vous travaillez avec un énorme ensemble de données (principalement avec un grand nombre de colonnes / fonctionnalités).
la source
Si vous ne voulez pas qu'il s'affiche
NaN
et que vous avez deux longueurs particulières, l'ajout d'un «espace» dans chaque cellule restante fonctionnera également.Si vous avez plus de 2 longueurs d'entrées, il est conseillé de créer une fonction qui utilise une méthode similaire.
la source
pd.DataFrame ([my_dict]) fera l'affaire!
la source