2016-07-07 20 views
13

Panda è grande per affrontare un ampio spettro di casi d'uso nell'analisi dei dati. Può essere un po 'scoraggiante esplorare la documentazione per capire qual è il modo migliore per eseguire un particolare compito.Differenza (s) tra unione() e concat() in panda

Attualmente sto cercando di capire la differenza essenziale (s) tra pd.DataFrame.merge() e pd.concat(). Finora, questo è quello che posso articolare:

.merge() può utilizzare solo colonne (più indici di righe) ed è semanticamente adatto per operazioni di tipo database. .concat() può essere utilizzato con entrambi gli assi, utilizzando solo indici e offre l'opzione per l'aggiunta di un indice gerarchico.

Incidentalmente, ciò consente la seguente ridondanza: entrambi possono combinare due frame di dati utilizzando gli indici di righe.

E come per pd.DataFrame.join(), sembra che offra solo una scorciatoia per un sottoinsieme dei casi d'uso di .merge().

Qualcuno potrebbe per favore commentare quanto completa e accurata è la mia comprensione a questo punto?

Grazie.

+0

Inoltre, in relazione: http://stackoverflow.com/a/37891437/1972495 una discussione intorno '' '' .merge() '' '' e '' '' .join() '' ''. – WindChimes

risposta

13

Una differenza molto alto livello è quello merge() viene utilizzato per unire due (o più) dataframes sulla base dei valori delle colonne comuni (indici possono essere utilizzati anche usare left_index=True e/o right_index=True), e concat() viene utilizzato per aggiungi uno (o più) dataframes uno sotto l'altro (o lateralmente, a seconda che l'opzione axis sia impostata su 0 o 1).

join() viene utilizzato per unire 2 dataframes sulla base dell'indice; invece di usare con merge() possiamo usare join().

Ad esempio:

df1 = pd.DataFrame({'Key': ['b', 'b', 'a', 'c', 'a', 'a', 'b'], 'data1': range(7)}) 

df1: 
    Key data1 
0 b 0 
1 b 1 
2 a 2 
3 c 3 
4 a 4 
5 a 5 
6 b 6 

df2 = pd.DataFrame({'Key': ['a', 'b', 'd'], 'data2': range(3)}) 

df2: 
    Key data2 
0 a 0 
1 b 1 
2 d 2 

#Merge 
#The 2 dataframes are merged on the basis on values in column "Key" as it is a common column in 2 dataframes 

pd.merge(df1, df2) 

    Key data data2 
0 b 0 1 
1 b 1 1 
2 b 6 1 
3 a 2 0 
4 a 4 0 
5 a 5 0 

#Concat 
# df2 dataframe is appended at the bottom of df1 

pd.concat([df1, df2]) 

Key data1 data2 
0 b 0 NaN 
1 b 1 NaN 
2 a 2 NaN 
3 c 3 NaN 
4 a 4 NaN 
5 a 5 NaN 
6 b 6 NaN 
0 a Nan 0 
1 b Nan 1 
2 d Nan 2