在跟着一些教程学习数据分析时,会用到pandas操作。其中遇到了一个小问题:
使用concat横向连接(axis=1)两个表时,如果其中一张表格中做过drop的操作,而另一张没有做过,连接之后,会产生很多NaN的行。
本文适用情况:
数据处理时已经完成了缺失值处理,比如删除了某些行。在进行后续的操作时,如对某一列编码产生了新的列,需要重新拼接时,如果用concat函数的默认参数,会导致被删除的行以NaN值填充重新出现(如下图)。然后需要重新处理缺失值。。
先说结论:
如果两个表格最开始行数相同:将concat函数的join='inner'。默认为'outer',导致的上述问题发生。
如果行数不同,
简单整理了一下pandas的concat()函数用法。
1、首先简单创建两个DataFrame,分别为df1、df2:
2、横向连接axis=1(纵向连接时axis=0即可),df2连接到了df1的右侧。
3、接下来对df1进行第0行的drop操作:可以看到index从1开始,第0行已经被删除掉。
4、此刻如果直接执行concat([df1_1,df2],axis=1),会发现0,0位置产生了一个NaN,相当于在拼接时填补了之前删除的df1的index=0的行。
查看了一下pandas文档中关于concat的介绍:发现concat()默认的join方式为'outer'。
改为inner再看一下效果:第0行没有出现了。是我想要的效果。
重新在课程的代码里面用join='inner'试一下,NaN不会出现。但是由于后面的表的行数=前表删除行之后的行数,内连接之后行数变少了。最好的办法,是用前表的index列表作为后表创建的index。