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

记录一下错误:

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'))

你可能感兴趣的:(随笔,数据分析-python,join)