Ich habe einen Pandas Datenrahmen:Python: Pandas Datenrahmen aus der Serie von dict
type(original)
pandas.core.frame.DataFrame
, die die Objekt-Serie umfasst original['user']
:
type(original['user'])
pandas.core.series.Series
original['user']
verweist auf eine Reihe von dicts:
type(original['user'].ix[0])
dict
Jedes Diktat hat die gleichen Schlüssel:
Oben ist (Teil von) einer der dicts von user
Felder in einem Tweet von tweeter API. Ich möchte aus diesen Diktaten einen Datenrahmen aufbauen.
Wenn ich versuche, einen Datenrahmen direkt zu machen, bekomme ich nur eine Spalte für jede Zeile und diese Spalte enthält die gesamte dict:
pd.DataFrame(original['user'][:2])
user
0 {u'follow_request_sent': False, u'profile_use_...
1 {u'follow_request_sent': False, u'profile_use_..
Wenn ich versuche, einen Datenrahmen mit from_dict() I zu erstellen erhalten das gleiche Ergebnis:
pd.DataFrame.from_dict(original['user'][:2])
user
0 {u'follow_request_sent': False, u'profile_use_...
1 {u'follow_request_sent': False, u'profile_use_..
Next ich eine Liste Verständnis versuchte, die einen Fehler zurückgegeben:
item = [[k, v] for (k,v) in users]
ValueError: too many values to unpack
Wenn ich einen Datenrahmen aus einer einzigen Zeile zu erstellen, es funktioniert fast:
df = pd.DataFrame.from_dict(original['user'].ix[0])
df.reset_index()
index contributors_enabled created_at default_profile default_profile_image description entities favourites_count follow_request_sent followers_count following friends_count geo_enabled id id_str is_translation_enabled is_translator lang listed_count location name notifications profile_background_color profile_background_image_url profile_background_image_url_https profile_background_tile profile_image_url profile_image_url_https profile_link_color profile_location profile_sidebar_border_color profile_sidebar_fill_color profile_text_color profile_use_background_image protected screen_name statuses_count time_zone url utc_offset verified
0 description False Mon May 26 11:58:40 +0000 2014 True False {u'urls': []} 0 False 157
Es funktioniert fast wie ich es will, es sei denn es das description
Feld als Standard-Index setzt.
Jedes der dicts hat 40 Tasten, aber ich brauche nur etwa 10 von ihnen und ich habe 28734 Zeilen im Datenrahmen.
Wie kann ich die Tasten herausfiltern, die ich nicht brauche?
Sie sollten hier verwenden read_json dies in einem einzigen Datenrahmen zu erhalten. Die Verwendung eines DataFrame von DataFrames ist eine schlechte Idee. –
@ andy-hayden, ich dachte darüber nach, aber es erfordert zusätzliche Datenbank Abfrage. Ich speichere Daten in lokalen Mongo db, aber ich möchte die Interaktion zwischen Python und Mongo reduzieren. – makambi