Vấn đề tham gia gấu trúc: các cột chồng chéo nhưng không có hậu tố được chỉ định


136

Tôi có 2 khung dữ liệu sau:

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

Khi tôi cố gắng tham gia 2 dataframes này:

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

Tôi nhận được lỗi:

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

Tại sao cái này rất? Các dataframes có các giá trị 'mukey' chung.

Câu trả lời:


145

Lỗi của bạn trên đoạn dữ liệu bạn đã đăng là một chút khó hiểu, vì không có giá trị chung, thao tác nối không thành công vì các giá trị không trùng nhau, nó yêu cầu bạn cung cấp hậu tố cho phía bên trái và bên phải:

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 hoạt động vì nó không có hạn chế này:

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

32

Các .join()chức năng được sử dụng indextrong những truyền như tham số dữ liệu, vì vậy bạn nên sử dụng set_indexhoặc sử dụng .mergechức năng thay thế.

Vui lòng tìm hai ví dụ nên hoạt động trong trường hợp của bạn:

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

hoặc là

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

27

Lỗi này chỉ ra rằng hai bảng có 1 hoặc nhiều tên cột có cùng tên cột. Thông báo lỗi dịch thành: "Tôi có thể thấy cùng một cột trong cả hai bảng nhưng bạn chưa bảo tôi đổi tên trước khi đưa một trong số chúng vào"

Bạn có thể muốn xóa một trong các cột trước khi đưa nó vào cột khác bằng cách sử dụng del df ['tên cột'] hoặc sử dụng lsuffix để viết lại cột ban đầu hoặc rsuffix để đổi tên cột được mang.

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

1

Chủ yếu tham gia được sử dụng riêng để tham gia dựa trên chỉ mục, không dựa trên tên thuộc tính, vì vậy thay đổi tên thuộc tính trong hai tệp dữ liệu khác nhau, sau đó thử tham gia, chúng sẽ được tham gia, nếu không, lỗi này được đưa ra

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.