2014-10-30 10 views
55

mam następujące 2 ramek danych:Pandy dołączyć problem: kolumny pokrywają ale nie przyrostek określone

df_a = 

    mukey DI PI 
0 100000 35 14 
1 1000005 44 14 
2 1000006 44 14 
3 1000007 43 13 
4 1000008 43 13 

df_b = 
    mukey niccdcd 
0 190236  4 
1 190237  6 
2 190238  7 
3 190239  4 
4 190240  7 

Kiedy próbuję połączyć te 2 dataframes:

join_df = df_a.join(df_b,on='mukey',how='left') 

pojawia się błąd:

*** ValueError: columns overlap but no suffix specified: Index([u'mukey'], dtype='object') 

Dlaczego tak się dzieje? Ramki danych mają wspólne wartości "mukey".

+1

Błąd jest nieco tajemniczy, tu jest problem, że nie masz żadnych wartości, które są wspólne dla wykonać na przyłączyć, jeśli zrobił to byłoby w porządku: 'LS_sgo.merge (MSU_pi, o =” mukey ', how =' left ') ' – EdChum

+1

Mam wspólne wartości w kolumnach 2' mukey ', po prostu nie w małej części pokazanych ramek danych. Dołączenie do nich w programie Excel działa, ale wydaje się, że nie w pandach ... Czy jest jakiś sposób, abym mógł podać więcej informacji, aby pomóc w zlokalizowaniu tego problemu? – user308827

+0

Musisz opublikować swoje nieprzetworzone dane, czy próbowałeś też scalić? – EdChum

Odpowiedz

62

Twój błąd w wstawionym fragmencie jest trochę tajemniczy, ponieważ ponieważ nie ma wspólnych wartości, operacja łączenia nie powiedzie się, ponieważ wartości się nie pokrywają, wymaga podania sufiksu dla lewego i prawego hand side:

In [173]: 

df_a.join(df_b, on='mukey', how='left', lsuffix='_left', rsuffix='_right') 
Out[173]: 
     mukey_left DI PI mukey_right niccdcd 
index           
0   100000 35 14   NaN  NaN 
1   1000005 44 14   NaN  NaN 
2   1000006 44 14   NaN  NaN 
3   1000007 43 13   NaN  NaN 
4   1000008 43 13   NaN  NaN 

merge działa, ponieważ nie ma tego ograniczenia:

In [176]: 

df_a.merge(df_b, on='mukey', how='left') 
Out[176]: 
    mukey DI PI niccdcd 
0 100000 35 14  NaN 
1 1000005 44 14  NaN 
2 1000006 44 14  NaN 
3 1000007 43 13  NaN 
4 1000008 43 13  NaN 
+0

dziękuję! to działa ... – user308827

+0

Jaki argument pozwoli lewemu złączeniu na wprowadzenie tylko pasujących prawych kluczy ramek danych? Na przykład mam df1 z 931 rekordami. df2 z 153 000 rekordów. Tylko 21 rekordów z df2 powinno pasować do df1, a gdy df1 i df2 są połączone, powinienem otrzymać tylko 931 rekordów z lewej ramki danych (df1). Jednak w końcowym wyniku otrzymuję 935 punktów. – david

+1

@david prawdopodobnie oznacza, że ​​masz zduplikowane identyfikatory w df1 lub df2 – EdChum

8

funkcja .join() używa index o przekazany jako zbiorze argumentów, więc należy użyć set_index lub użyj funkcji .merge.

Proszę odnaleźć dwa przykłady, które powinny działać w Twoim przypadku:

join_df = LS_sgo.join(MSU_pi.set_index('mukey'), on='mukey', how='left')

lub

join_df = df_a.merge(df_b, on='mukey', how='left')

3

Ten błąd wskazuje, że dwie tabele mają więcej nazwisk kolumnie 1 lub że mają tę samą nazwę kolumny. Komunikat o błędzie tłumaczy się na: "Widzę tę samą kolumnę w obu tabelach, ale nie powiedziałeś mi, aby zmienić jej nazwę, zanim przyniosę jedną z nich w"

Chcesz usunąć jedną z kolumn przed jej wprowadzeniem z drugiej na używanie del df ['nazwa kolumny'], lub użyj polecenia lsuffix, aby ponownie zapisać oryginalną kolumnę, lub rsuffix, aby zmienić nazwę tego, który jest wprowadzany.

df_a.join(df_b, on='mukey', how='left', lsuffix='_left', rsuffix='_right') 
Powiązane problemy