pandas concat ignore_index 无效,依然保留索引

假设现在有两个数据:

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=1ignore_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获得范围。

参考:
pandas concat ignore_index doesn’t work

    原文作者:Shisui
    原文地址: https://segmentfault.com/a/1190000015370825
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞