Python中使用pandas中concat横向连接表时产生NaN

在跟着一些教程学习数据分析时,会用到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'。

image.png

pandas.concat — pandas 1.3.5 documentationhttps://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.concat.html

 改为inner再看一下效果:第0行没有出现了。是我想要的效果。

重新在课程的代码里面用join='inner'试一下,NaN不会出现。但是由于后面的表的行数=前表删除行之后的行数,内连接之后行数变少了。最好的办法,是用前表的index列表作为后表创建的index

 

image.png

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值