J'ai un dictionnaire Python comme celui-ci:
{u'2012-06-08': 388,
u'2012-06-09': 388,
u'2012-06-10': 388,
u'2012-06-11': 389,
u'2012-06-12': 389,
u'2012-06-13': 389,
u'2012-06-14': 389,
u'2012-06-15': 389,
u'2012-06-16': 389,
u'2012-06-17': 389,
u'2012-06-18': 390,
u'2012-06-19': 390,
u'2012-06-20': 390,
u'2012-06-21': 390,
u'2012-06-22': 390,
u'2012-06-23': 390,
u'2012-06-24': 390,
u'2012-06-25': 391,
u'2012-06-26': 391,
u'2012-06-27': 391,
u'2012-06-28': 391,
u'2012-06-29': 391,
u'2012-06-30': 391,
u'2012-07-01': 391,
u'2012-07-02': 392,
u'2012-07-03': 392,
u'2012-07-04': 392,
u'2012-07-05': 392,
u'2012-07-06': 392}
Les clés sont des dates Unicode et les valeurs sont des entiers. Je voudrais convertir cela en une trame de données pandas en ayant les dates et leurs valeurs correspondantes dans deux colonnes distinctes. Exemple: col1: Dates col2: DateValue (les dates sont toujours Unicode et les valeurs de date sont toujours des entiers)
Date DateValue
0 2012-07-01 391
1 2012-07-02 392
2 2012-07-03 392
. 2012-07-04 392
. ... ...
. ... ...
Toute aide dans ce sens serait très appréciée. Je n'arrive pas à trouver de ressources sur les documents des pandas pour m'aider.
Je sais qu'une solution pourrait être de convertir chaque paire clé-valeur dans ce dict, en un dict afin que toute la structure devienne un dict de dict, puis nous pouvons ajouter chaque ligne individuellement à la trame de données. Mais je veux savoir s'il existe un moyen plus simple et plus direct de le faire.
Jusqu'à présent, j'ai essayé de convertir le dict en un objet série, mais cela ne semble pas maintenir la relation entre les colonnes:
s = Series(my_dict,index=my_dict.keys())
Réponses:
L'erreur ici est depuis l'appel du constructeur DataFrame avec des valeurs scalaires (où il s'attend à ce que les valeurs soient une liste / dict / ... c'est-à-dire qu'elles aient plusieurs colonnes):
Vous pouvez prendre les éléments du dictionnaire (c'est-à-dire les paires clé-valeur):
Mais je pense qu'il est plus logique de passer le constructeur de la série:
la source
from_dict
a un kwarg orient, donc je pourrais l'utiliser si je voulais éviter la transposition. Il y a peu d'options avecfrom_dict
, sous le capot, ce n'est pas vraiment différent de l'utilisation du constructeur DataFrame.pandas.core.common.PandasError: DataFrame constructor not properly called!
du premier exempleLors de la conversion d'un dictionnaire en un cadre de données pandas où vous voulez que les clés soient les colonnes dudit cadre de données et les valeurs soient les valeurs de ligne, vous pouvez simplement mettre des crochets autour du dictionnaire comme ceci:
Cela m'a évité quelques maux de tête, donc j'espère que cela aide quelqu'un là-bas!
EDIT: Dans les documents pandas, une option pour le
data
paramètre dans le constructeur DataFrame est une liste de dictionnaires. Ici, nous passons une liste avec un dictionnaire dedans.la source
Comme expliqué sur une autre réponse en utilisant
pandas.DataFrame()
directement ici n'agira pas comme vous le pensez.Ce que vous pouvez faire, c'est utiliser
pandas.DataFrame.from_dict
avecorient='index'
:la source
rename
méthode pour définir également les noms de l'index et des colonnes en une seule fois?Passez les éléments du dictionnaire au constructeur DataFrame et donnez les noms des colonnes. Après cela, analysez la
Date
colonne pour obtenir desTimestamp
valeurs.Notez la différence entre python 2.x et 3.x:
En python 2.x:
En Python 3.x: (nécessitant une 'liste' supplémentaire)
la source
PandasError: DataFrame constructor not properly called!
df = pd.DataFrame(list(data.items()), columns=['Date', 'DateValue'])
ps en particulier, j'ai trouvé les exemples orientés lignes utiles; depuis souvent que la façon dont les enregistrements sont stockés en externe.
https://pbpython.com/pandas-list-dict.html
la source
Les pandas ont une fonction intégrée pour la conversion de dict en trame de données.
Pour vos données, vous pouvez les convertir comme ci-dessous:
la source
la source
Vous pouvez également simplement passer les clés et les valeurs du dictionnaire au nouveau dataframe, comme ceci:
la source
Dans mon cas, je voulais que les clés et les valeurs d'un dict soient des colonnes et des valeurs de DataFrame. Donc, la seule chose qui a fonctionné pour moi était:
la source
C'est ce qui a fonctionné pour moi, car je voulais avoir une colonne d'index distincte
la source
Accepte un dict comme argument et renvoie une trame de données avec les clés du dict comme index et les valeurs comme colonne.
la source
Voici comment cela a fonctionné pour moi:
J'espère que ça aide
la source
Si vous n'encapsulez pas l'
yourDict.keys()
intérieur delist()
, alors vous vous retrouverez avec toutes vos clés et valeurs placées dans chaque ligne de chaque colonne. Comme ça:Date \ 0 (2012-06-08, 2012-06-09, 2012-06-10, 2012-06-1...
1 (2012-06-08, 2012-06-09, 2012-06-10, 2012-06-1...
2 (2012-06-08, 2012-06-09, 2012-06-10, 2012-06-1...
3 (2012-06-08, 2012-06-09, 2012-06-10, 2012-06-1...
4 (2012-06-08, 2012-06-09, 2012-06-10, 2012-06-1...
Mais en ajoutant
list()
alors le résultat ressemble à ceci:Date Date_Values 0 2012-06-08 388 1 2012-06-09 388 2 2012-06-10 388 3 2012-06-11 389 4 2012-06-12 389 ...
la source
J'ai rencontré cela plusieurs fois et j'ai un exemple de dictionnaire que j'ai créé à partir d'une fonction
get_max_Path()
, et il retourne l'exemple de dictionnaire:{2: 0.3097502930247044, 3: 0.4413177909384636, 4: 0.5197224051562838, 5: 0.5717654946470984, 6: 0.6063959031223476, 7: 0.6365209824708223, 8: 0.655918861281035, 9: 0.680844386645206}
Pour convertir cela en une trame de données, j'ai exécuté ce qui suit:
df = pd.DataFrame.from_dict(get_max_path(2), orient = 'index').reset_index()
Renvoie une trame de données simple à deux colonnes avec un index séparé:
index 0 0 2 0.309750 1 3 0.441318
Renommez simplement les colonnes en utilisant
f.rename(columns={'index': 'Column1', 0: 'Column2'}, inplace=True)
la source
Je pense que vous pouvez apporter des modifications à votre format de données lorsque vous créez un dictionnaire, puis vous pouvez facilement le convertir en DataFrame:
contribution:
production:
contribution:
sortie: sera votre DataFrame
Vous avez juste besoin d'utiliser une édition de texte dans un endroit comme Sublime ou peut-être Excel.
la source