web-dev-qa-db-fra.com

Convertir un dictionnaire en un pandas dataframe

J'essaie de convertir un dictionnaire qui n'a qu'un seul enregistrement en un cadre de données pandas. J'ai utilisé le code suivant à partir d'autres solutions:

d =  {'id': 'CS2_056', 'cost': 2, 'name': 'Tap'}

pd.DataFrame(d.items(), columns=['id', 'cost','name'])

Mais j'obtiens l'erreur suivante:

PandasError: DataFrame constructor not properly called!
13
user3302483

Votre dict n'a qu'une seule liste d'utilisation des enregistrements:

import pandas as pd
d =  {'id': 'CS2_056', 'cost': 2, 'name': 'Tap'}
df = pd.DataFrame([d], columns=d.keys())
print df

Sortie:

   id  cost name
0  CS2_056     2  Tap
31
Serenity

Vous utilisez peut-être python3. en python3, nous avons là une liste

pd.DataFrame(list(d.items()), columns=['id', 'cost','name'])
5

Une autre façon de créer une trame de données avec une seule ligne à partir d'un dictionnaire est de créer d'abord une trame de données vide puis appending :

import pandas as pd 
d =  {'id': 'CS2_056', 'cost': 2, 'name': 'Tap'}
df = pd.DataFrame().append(d, ignore_index=True)
print(df)

   cost       id name
0   2.0  CS2_056  Tap

Notez que cette méthode est beaucoup plus lente que la solution de @Serenity, donc ne choisissez certainement pas cette méthode si vous êtes préoccupé par les performances. Mais avoir des options est toujours sympa.

2
bunji

Bien que cette question ait un doublon ( Python Dictionary to Pandas Dataframe ), je pense qu'il existe une réponse plus simple que celles fournies ici.

Convertissez les valeurs en listes:

d = {'id': ['CS2_056'], 'cost': [2], 'name': ['Tap']}

puis simplement:

df = pd.DataFrame(d)
print(df)
#     cost       id name
#  0     2  CS2_056  Tap


Gardez à l'esprit que si l'ordre des colonnes est important, vous devrez toujours fournir explicitement columns à DataFrame:

df = pd.DataFrame(d, columns=['id', 'cost', 'name'])
print(df)
#          id  cost name
#  0  CS2_056     2  Tap
1
DeepSpace