Pandas join issue: columns overlap but no suffix specified

后端 未结 4 1361
慢半拍i
慢半拍i 2020-12-02 06:56

I have following 2 data frames:

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         


        
相关标签:
4条回答
  • 2020-12-02 07:25

    This error indicates that the two tables have the 1 or more column names that have the same column name. The error message translates to: "I can see the same column in both tables but you haven't told me to rename either before bringing one of them in"

    You either want to delete one of the columns before bringing it in from the other on using del df['column name'], or use lsuffix to re-write the original column, or rsuffix to rename the one that is being brought it.

    df_a.join(df_b, on='mukey', how='left', lsuffix='_left', rsuffix='_right')
    
    0 讨论(0)
  • 2020-12-02 07:26

    Your error on the snippet of data you posted is a little cryptic, in that because there are no common values, the join operation fails because the values don't overlap it requires you to supply a suffix for the left and right 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 works because it doesn't have this restriction:

    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 讨论(0)
  • 2020-12-02 07:27

    Mainly join is used exclusively to join based on the index,not on the attribute names,so change the attributes names in two different dataframes,then try to join,they will be joined,else this error is raised

    0 讨论(0)
  • 2020-12-02 07:36

    The .join() function is using the index of the passed as argument dataset, so you should use set_index or use .merge function instead.

    Please find the two examples that should work in your case:

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

    or

    join_df = df_a.merge(df_b, on='mukey', how='left')
    
    0 讨论(0)
提交回复
热议问题