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!
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
Vous utilisez peut-être python3. en python3, nous avons là une liste
pd.DataFrame(list(d.items()), columns=['id', 'cost','name'])
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 append
ing :
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.
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