Comment créer un Pandas dataframe à partir d'une liste de OrderedDicts?

voix
0

J'ai la liste suivante:

o_dict_list = [(OrderedDict([('StreetNamePreType', 'ROAD'), ('StreetName', 'Coffee')]), 'Ambiguous'),
           (OrderedDict([('StreetNamePreType', 'AVENUE'), ('StreetName', 'Washington')]), 'Ambiguous'),
           (OrderedDict([('StreetNamePreType', 'ROAD'), ('StreetName', 'Quartz')]), 'Ambiguous')]

Et comme le dit le titre, je suis en train de prendre cette liste et de créer une trame de données de pandas géants où les colonnes sont: 'StreetNamePreType'et 'StreetName'et les lignes contiennent les valeurs correspondantes pour chaque clé dans la OrderedDict.

Je l' ai fait quelques recherches sur StackOverflow pour obtenir des conseils sur la façon de créer une trame de données, voir ici mais je reçois une erreur quand je lance ce code (je suis en train de reproduire ce qui se passe dans cette réponse).

from collections import Counter, OrderedDict
import pandas as pd

col = Counter()
for k in o_dict_list:
    col.update(k)

df = pd.DataFrame([k.values() for k in o_dict_list], columns = col.keys())

Quand je lance ce code, l'erreur que je reçois est: TypeError: unhashable type: 'OrderedDict'

Je regardais cette erreur, ici , je reçois qu'il ya un problème avec les types de données, mais je, malheureusement, je ne sais pas assez sur le fonctionnement interne de Python / Pandas pour résoudre ce problème moi - même.

Je soupçonne que ma liste de OrderedDict est pas exactement les mêmes que dans ici qui est la raison pour laquelle je ne reçois pas mon code pour. Plus précisément, je crois avoir une liste des ensembles, et chaque élément contient une OrderedDict. L'exemple que je suis lié à ici semble être une vraie liste des OrderedDicts.

Encore une fois, je ne sais pas assez sur le fonctionnement interne de Python / Pandas pour résoudre ce problème moi-même et suis à la recherche de l'aide.

Créé 20/10/2018 à 03:30
source utilisateur
Dans d'autres langues...                            


3 réponses

voix
2

J'utiliser la compréhension de la liste pour le faire comme suit.

pd.DataFrame([o_dict_list[i][0] for i, j in enumerate(o_dict_list)])

Voir ci-dessous la sortie.

 StreetNamePreType  StreetName
0   ROAD            Coffee
1   AVENUE          Washington
2   ROAD            Quartz
Créé 20/10/2018 à 04:17
source utilisateur

voix
1

extraire les OrderedDictobjets de votre liste et l' utilisation pd.Dataframedevrait fonctionner

values= []
for i in range(len(o_dict_list)):
    values.append(o_dict_list[i][0])

pd.DataFrame(values)


    StreetNamePreType   StreetName
0   ROAD    Coffee
1   AVENUE  Washington
2   ROAD    Quartz
Créé 20/10/2018 à 03:53
source utilisateur

voix
0
d = [{'points': 50, 'time': '5:00', 'year': 2010}, 
{'points': 25, 'time': '6:00', 'month': "february"}, 
{'points':90, 'time': '9:00', 'month': 'january'}, 
{'points_h1':20, 'month': 'june'}]

pd.DataFrame(d)
Créé 20/10/2018 à 04:12
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more