Wenn ich eine CSV-Datei Zeilen habe, in denen eine Spalte dictricts in ihnen hat, wie erstelle ich eine neue Spalte extrahieren ein einzelnes Element jedes Ordereddict mit Python (3. +)/Pandas (. 18)?Wie extrahiert man aus einem Array von Ordereddicts einen Wert?
Hier ist ein Beispiel. Meine Spalte, attributes
, hat billingPostalCodes
versteckt in ordereddicts. Alles, was mir wichtig ist, ist eine Spalte mit der billingPostalCodes
erstellen.
Hier ist, was meine Daten jetzt aussieht:
import pandas as pd
from datetime import datetime
import csv
from collections import OrderedDict
df = pd.read_csv('sf_account_sites.csv')
print(df)
ergibt:
id attributes
1 OrderedDict([(u'attributes', OrderedDict([(u'type', u'Account'), (u'url', u'/services/data/v29.0/sobjects/Account/001d000001tKZmWAAW')])), (u'BillingPostalCode', u'85020')])
2 OrderedDict([(u'attributes', OrderedDict([(u'type', u'Account'), (u'url', u'/services/data/v29.0/sobjects/Account/001d000001tKZmWAAW')])), (u'BillingPostalCode', u'55555')])
...
ich auf individueller Ebene, ob ich das tun:
dict = OrderedDict([(u'attributes', OrderedDict([(u'type', u'Account'), (u'url', u'/services/data/v29.0/sobjects/Account/001d000001tKZmWAAW')])), (u'BillingPostalCode', u'85020')])
print(dict['BillingPostalCode'])
Ich werde 85020 zurück als Ergebnis.
Was muss ich tun, damit es so aussieht?
id zip_codes
1 85020
2 55555
...
Muss ich eine Anwendungsfunktion verwenden? Eine for-Schleife? Ich habe viele verschiedene Dinge ausprobiert, aber ich kann nichts am Datenrahmen arbeiten.
Vielen Dank im Voraus, und lassen Sie mich wissen, wenn ich genauer sein muss.
Das sieht so aus, als ob es funktionieren sollte, aber ich bekomme 'TypeError: ('String-Indizes müssen ganze Zahlen sein,' trat bei Index 0 auf '), wenn ich das versuche. Irgendeine Idee warum das der Fall ist? –
@AndrewKraemer Ich habe das an dem von Ihnen zitierten Beispiel getestet und es hat gut funktioniert. Welche Version von Pandas benutzt du? Ich bin auf Pandas 0.18. Ich vermute, dass in einer älteren Pandas-Version die Indexierung der Zeilen mit Ganzzahlen und nicht mit Spaltennamen erfolgt. Versuchen Sie stattdessen 'row [1] ["BillingPostalCode"] '. –
Ich bin tatsächlich auf .18. Ich lief, was Sie empfohlen haben und bekam das gleiche Problem. Ich kann den tatsächlichen Datensatz hochladen, wenn es helfen würde. Es scheint, dass die Daten in der Spalte Attribute als String gespeichert werden, wo es ein Collections.OrderedDict funktionieren muss. Nicht sicher, wie Sie die Zeichenfolge in OderedDict konvertieren. –