假设现在有两个数据:
df1
0 1 2 3
a 5.1 4.7 4.9 2.4
b 3.0 3.2 3.0 6.2
c 4.5 1.3 2.7 1.8
d 1.4 1.9 1.4 0.5
e 0.2 0.2 0.2 3.5
newdf
0 1 2 3
0 10 45 13 1
1 47 15 46 42
2 38 26 20 11
3 9 16 44 23
4 45 6 24 35
使用concat
合并,设置参数axis=1
,ignore_index=True
pd.concat([df1,newdf],axis=1,ignore_index=True)
0 1 2 3 4 5 6 7
a 5.1 4.7 4.9 2.4 NaN NaN NaN NaN
b 3.0 3.2 3.0 6.2 NaN NaN NaN NaN
c 4.5 1.3 2.7 1.8 NaN NaN NaN NaN
d 1.4 1.9 1.4 0.5 NaN NaN NaN NaN
e 0.2 0.2 0.2 3.5 NaN NaN NaN NaN
0 NaN NaN NaN NaN 10.0 45.0 13.0 1.0
1 NaN NaN NaN NaN 47.0 15.0 46.0 42.0
2 NaN NaN NaN NaN 38.0 26.0 20.0 11.0
3 NaN NaN NaN NaN 9.0 16.0 44.0 23.0
4 NaN NaN NaN NaN 45.0 6.0 24.0 35.0
但是参数设置为axis=0
的时候有效,列表成功合并,而且index的确被忽略了。
pd.concat([df1,newdf],axis=0,ignore_index=True)
0 1 2 3
0 5.1 4.7 4.9 2.4
1 3.0 3.2 3.0 6.2
2 4.5 1.3 2.7 1.8
3 1.4 1.9 1.4 0.5
4 0.2 0.2 0.2 3.5
5 10.0 45.0 13.0 1.0
6 47.0 15.0 46.0 42.0
7 38.0 26.0 20.0 11.0
8 9.0 16.0 44.0 23.0
9 45.0 6.0 24.0 35.0
最后的解决方法是先删除索引,再进行合并。。。
df1.reset_index(drop=True, inplace=True)
df2.reset_index(drop=True, inplace=True)
原因
ignore_index = True
并不意味忽略index然后连接,而是指连接后再重新赋值index(len(index))。从上面可以看出如果两个df有重叠的索引还是可以自动合并的。
原解释
ignore_index = True'忽略',表示未在连接轴上对齐。它只是按它们传递的顺序将它们粘贴在一起,然后重新分配实际索引的范围(例如,范围(len(索引))),以便加入非重叠索引之间的差异(假设示例中的轴= 1)是,使用ignore_index = False(默认值),您获得索引的concat,并使用ignore_index = True获得范围。