Ho un dataframe Pandas:Python: Pandas dataframe dalla serie di dict
type(original)
pandas.core.frame.DataFrame
che comprende la serie oggetto original['user']
:
type(original['user'])
pandas.core.series.Series
original['user']
punti ad un numero di dicts:
type(original['user'].ix[0])
dict
Ogni parola ha gli stessi tasti:
original['user'].ix[0].keys()
[u'follow_request_sent',
u'profile_use_background_image',
u'profile_text_color',
u'id',
u'verified',
u'profile_location',
# ... keys removed for brevity
]
Sopra è (parte di) uno dei dit dei campi user
in un tweet da tweeter API. Voglio costruire un data frame da questi dicts.
Quando provo a fare un frame di dati direttamente, ottengo solo una colonna per ogni riga e la colonna contiene tutta 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_..
Quando provo a generare un frame di dati utilizzando from_dict) I (ottenere lo stesso risultato:
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_..
Poi ho provato una lista di comprensione, che ha restituito un errore:
item = [[k, v] for (k,v) in users]
ValueError: too many values to unpack
Quando creo un frame di dati da una singola fila, quasi funziona:
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
Funziona quasi come lo voglio, tranne che imposta il campo description
come indice di default.
Ognuno dei dit ha 40 tasti ma ho solo bisogno di circa 10 di essi e ho 28734 righe nel frame di dati.
Come posso escludere i tasti di cui non ho bisogno?
Si dovrebbe usare read_json qui per ottenere questo in un unico dataframe. Utilizzare un DataFrame di DataFrames è una cattiva idea. –
@ andy-hayden, ci ho pensato ma richiede un database di query aggiuntivo. Conservo i dati nel mongo db locale, ma voglio ridurre l'interazione tra python e mongo. – makambi