如何修复:列重叠但未指定后缀
使用 pandas 时可能遇到的错误是:
ValueError : columns overlap but no suffix specified: Index(['column'], dtype='object')
当您尝试连接两个至少共享一个公共列名的数据框,并且没有为左侧或右侧数据框提供后缀来区分新数据框中的列时,就会出现此错误。
有两种方法可以修复此错误:
解决方案 1:提供后缀名称。
df1. join (df2, how = ' left ', lsuffix=' left ', rsuffix=' right ')
解决方案2:改用合并功能。
df1. merge (df2, how = ' left ')
以下示例展示了如何在实践中纠正此错误。
如何重现错误
假设我们尝试将以下两个数据框放在一起:
import pandas as pd #create first data frame df1 = pd. DataFrame ({' player ': ['A', 'B', 'C', 'D', 'E', 'F'], ' points ': [5, 7, 7, 9, 12, 9], ' assists ': [11, 8, 10, 6, 6, 5]}) #create second data frame df2 = pd. DataFrame ({' player ': ['A', 'B', 'C', 'D', 'E', 'F'], ' rebounds ': [4, 4, 6, 9, 13, 16], ' steals ': [2, 2, 1, 4, 3, 2]}) #attempt to perform left join on data frames df1. join (df2, how = ' left ') ValueError : columns overlap but no suffix specified: Index(['player'], dtype='object')
我们收到错误,因为两个数据框都共享“player”列,但没有为左侧或右侧数据框提供后缀来区分新数据框的列。
如何修复错误
修复此错误的一种方法是为左侧或右侧数据框提供后缀名称:
#perform left join on data frames with suffix provided df1. join (df2, how = ' left ', lsuffix=' left ', rsuffix=' right ') playerleft points assists playerright rebounds steals 0 A 5 11 A 4 2 1 B 7 8 B 4 2 2 C 7 10 C 6 1 3 D 9 6 D 9 4 4 E 12 6 E 13 3 5 F 9 5 F 16 2
修复此错误的另一种方法是简单地使用merge()函数,该函数在连接两个数据框时不会遇到此问题:
#merge two data frames df1. merge (df2, how = ' left ') player points assists rebounds steals 0 A 5 11 4 2 1 B 7 8 4 2 2 C 7 10 6 1 3 D 9 6 9 4 4 E 12 6 13 3 5 F 9 5 16 2
请注意, merge()函数只是从第二个数据帧中删除已经属于第一个数据帧的所有名称。
其他资源
如何合并索引上的两个 Pandas DataFrame
如何跨多列合并 Pandas DataFrame
如何将 Numpy 数组添加到 Pandas DataFrame