欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

columns overlap but no suffix specified: Index(['data1', 'data2'], dtype='object')解决方法

程序员文章站 2024-03-03 16:44:52
...

记录一下错误:

columns overlap but no suffix specified: Index(['data1', 'data2'], dtype='object')

首先说明该错误是由于使用pandas中的join方法连接两个DataFrame出现的错误。
错误原因:列名重复
解决方法:修改列名,使其不重名

df = pd.DataFrame({'data1':np.random.rand(5),
                  'data2':np.random.rand(5),
                  'key1':list('aabba'),
                  'key2':['one','two','one','two','one']})
print(df)

# 如果要将df分组后求其平均数,并添加到末尾,有以下两种方法
# 1. 常规方法
df_mean = df.groupby('key1').mean()
print(df_mean)
print(pd.merge(df, df_mean, how='inner', left_on='key1', right_index=True))

# 2.用transform
a = df.groupby('key1').transform(np.mean)
print(a)
print(df.join(a, how='inner'))

执行最后一句语句时报错columns overlap but no suffix specified: Index(['data1', 'data2'], dtype='object'),然后发现是两个DataFrame 的列名重复了,join不会像merge一样,merge会将重名的列明自动加上_x,_y加以区分,而join直接报错。
所以,我们的解决方法是修改其列明就好了。

常用的有两种方法:
1.用column修改列名

a = df.groupby('key1').transform(np.mean)
print(a)
a.columns = ['a', 'b']
print(df.join(a, how='inner'))

2.用add_profix为列名添加指定字符串前缀

a = df.groupby('key1').transform(np.mean).add_prefix('mean_')
print(a)
print(df.join(a, how='inner'))
相关标签: join