pandas concat “InvalidIndexError: Reindexing only valid with uniquely valued Index objects“

利用pandas的concat方法可以对多个DataFrame进行快捷的堆叠,非常方便,但是在使用concat会出现“pandas.errors.InvalidIndexError: Reindexing only valid with uniquely valued Index objects
”的提示,翻译过来就是:使用pandas对df进行concat操作时,相应的行、列索引必须唯一。但是也有一个例外情况,是什么呢,下面慢慢道来。

首先,创建几个df进行演示:

先对df1,df2进行纵行、横行的拼接,如下代码。我们发现在列、行索引没有重名的前提下,concat正常运行。

下面引入重名列索引的df3与df1进行concat拼接操作,因为df3的列索引abcab中ab列重复,所以导致df3无法与df1进行concat堆叠。

下面引入重名列索引的df3与df4进行concat拼接操作,虽然df3,df4的列索引abcab中ab列重复,但是df3,df4的列索引相同,所以concat也能正常运行,这就是例外情况。

那么如何对重复的行、列索引df进行concat操作呢?那就是:

去重,如果是行索引重复,那么对这两个df执行df.reset_index()。

如果是列索引重复,那么使用df.rename(columns="xxxx",inplace=True)进行列索引重命名

import pandas as pd
import numpy as np

df1=pd.DataFrame(np.random.randint(0,5,(6,5)),columns=list("abcde"))

df3=pd.DataFrame(np.random.randint(-10,0,(3,5)),columns=list("abcab"))

#df1=df1.reset_index()
#df3=df3.reset_index()

data3.columns = [j + f'_{i}' if data.columns.duplicated()[i] else j for i,j in enumerate(data.columns)]

df_c13=pd.concat([df1,df3],keys=["df1","df3"])
print(df_c13)

最终我们得出结论:如果两个df的列名完全相同,那么即使df行列中含有重复的列索引,也可以concat纵向堆叠操作

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值