利用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)