如何修复:列重叠但未指定后缀


使用 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

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注