2015-03-24 8 views
5

Ho due dataframes sotto, df_purchase (1) e df_login (2)errore Key on panda merge (a sinistra join)

+--------+-----+--------+------------+--------------------+-------------+--------------------------+ 
|  | age | gender | ttp  |  count  | sum(amount) |   region   | 
+--------+-----+--------+------------+--------------------+-------------+--------------------------+ 
| 49427 | 63 | M  | 824.731412 | 2     | 25.00  | Omaha, Nebraska   | 
| 28433 | 49 | M  | 1.166250 | 2     | 41.94  | Catasauqua, Pennsylvania | 
| 4162 | 29 | M  | 5.620949 | 2     | 51.78  | Eagle Center, Iowa  | 
| 18747 | 43 | M  | 153.502072 | 2     | 23.84  | Pacific, Washington  | 
| 45173 | 59 | M  | 0.027257 | 2     | 13.98  | De Soto, Missouri  | 
+--------+-----+--------+------------+--------------------+-------------+--------------------------+ 

+--------+-----+--------+------------+--------------------+-------------+--------------------------+ 
|  | age | gender | count  | region    |    |       | 
| 671766 | 84 | M  | 13900  | New York, New York |    |       | 
| 671166 | 84 | F  | 7619  | New York, New York |    |       | 
| 672209 | 85 | F  | 6483  | New York, New York |    |       | 
| 672671 | 85 | M  | 5808  | New York, New York |    |       | 
| 195201 | 34 | M  | 3817  | New York, New York |    |       | 
+--------+-----+--------+------------+--------------------+-------------+--------------------------+ 

Sto cercando di unire df_logins a df_purchase su età, sesso e regione con il seguente codice panda:

df = pd.merge(df_purchase, df_login[['count']], 
         how='left', on=['age', 'gender', 'region']) 

Tuttavia, continuo a ricevere questo errore: KeyError: 'age' Qualche idea?

+0

Non ci sono età comuni nelle due tabelle. Non vi è quindi alcuna intersezione tra le tabelle. –

risposta

5

Il KeyError nasce da questo:

df = pd.merge(df_purchase, df_login[['count']] <- this selects just count column, 
         how='left', on=['age', 'gender', 'region']) 

Hai appositamente selezionata solo una singola colonna da df_login, avete bisogno di questo:

df = pd.merge(df_purchase, df_login, 
         how='left', on=['age', 'gender', 'region']) 

sto supponendo che questo non è il vostro completo dato che non ci sono valori comuni nella colonna età e regione in df_login.