Bug小能手系列(python)_14: pd.concat得到的矩阵错误

pd.concat得到的不是自己想要的矩阵

  • [0 引言](#0 引言)
  • [1 错误原因](#1 错误原因)
  • [2 解决思路](#2 解决思路)
  • [3 具体代码](#3 具体代码)
  • [4 总结](#4 总结)

0 引言

今天在运行pd.concat (pd指的是pandas库),需要将两个DataFrame数据(数据分别为5*4的矩阵)进行列合并时,突然发现得到的矩阵是10*8的,而不是我想要的5*8的!!!虽然是个小问题,但是感觉网上给出的内容一直没把这个问题介绍清楚,这里就专门写一篇文章帮助大家理解这个问题,希望大家可以清晰地理解这个问题。运行得到的矩阵数据的图片如下:

运行代码的如下:

python 复制代码
data = pd.concat([data_0, data_1], axis=1)
# 或者是下面这样 得到的结果是一样的  
# 下面这样结果更不好  会消掉你的索引
data = pd.concat([data_0, data_1], axis=1, ignore_index=True)

可以看到矩阵中有很多nan的数值,初步分析是存在空缺值,排查后发现没有!!

然后,怀疑是两个数据冲突导致的,但是数据为什么会冲突呢? 根本没有什么区别呀?

最后,经过仔细分析后发现是:行号冲突!!!

1 错误原因

其实错误原因很简单:前面5行数据的行号和后面5行的行号不一样,所以使用concat连接的时候不会列直接连接,所以导致最终是个10*8的矩阵。

2 解决思路

按照上面的原因,只要将行号重置一下,那样的话不就可以正常连接了嘛?!

没错,解决思路就是将行号重置!!!

这里简要介绍一下所用的函数:reset_index

  • level: 控制哪些层次的索引需要被重置,默认为 None,表示所有层次的索引都会被重置。
  • drop: 如果为 True,将重置的索引从列中删除,默认为 False。
  • inplace: 如果为 True,将在原地修改对象,并返回 None。如果为 False,将返回一个新的带有重置索引的对象,默认为 False。
  • col_level: 如果索引是多层次的,指定将哪个层次的索引重置为列,默认为 0。
  • col_fill: 如果指定了 col_level,可以用来指定新列的名称

注意:这里没有明确说到底哪个是重置行号的,但是有个原地修改对象,这个可以直接将行号重置!!!

原来的data_1:

使用了代码:

python 复制代码
# 这里注意drop=True  这个也是要加的 不然你的行号会变成一个单独的列 
# 有兴趣的可以测试一下
data_1.reset_index(drop=True, inplace=True)

重置后的data_1:

3 具体代码

下面是使用zeros矩阵生成的数据,跟真实数据本质是一样的。示例代码如下(大家可以测试一下上面说的问题 以及解决方案):

python 复制代码
data_df = np.DataFrame(np.zeros([100,4]))
for i in range(len(data_df)//10):
	data_0 = data_df.iloc[i*5:(i+1)*5,:]
	data_1 = data_df.iloc[start_ind+i*5:start_ind+(i+1)*5, :]
	# 很少有人重置这里   这是因为第一遍的时候 data_0的索引就是0-4 所以不用重置
	# 但是第二遍的时候索引就不是了  所以在我们的代码里这个部分需要重置
	data_0.reset_index(drop=True,inplace=True)
	data_1.reset_index(drop=True, inplace=True)
	data = pd.concat([data_0, data_1],axis=1)

第1轮的data_0:

第2轮的data_0:

4 总结

总的而言,感觉出现concat得到矩阵错误主要是因为行号的问题。如果大家有什么问题的话可以评论留言,这边会根据最新的内容进行更新!!!

如果觉得这篇文章对你有用,记得点赞、收藏并分享给你的小伙伴们哦😄。

相关推荐
用户277844910499312 小时前
借助DeepSeek智能生成测试用例:从提示词到Excel表格的全流程实践
人工智能·python
JavaEdge在掘金14 小时前
ssl.SSLCertVerificationError报错解决方案
python
我不会编程55514 小时前
Python Cookbook-5.1 对字典排序
开发语言·数据结构·python
老歌老听老掉牙15 小时前
平面旋转与交线投影夹角计算
python·线性代数·平面·sympy
满怀101515 小时前
Python入门(7):模块
python
无名之逆15 小时前
Rust 开发提效神器:lombok-macros 宏库
服务器·开发语言·前端·数据库·后端·python·rust
你觉得20515 小时前
哈尔滨工业大学DeepSeek公开课:探索大模型原理、技术与应用从GPT到DeepSeek|附视频与讲义下载方法
大数据·人工智能·python·gpt·学习·机器学习·aigc
啊喜拔牙15 小时前
1. hadoop 集群的常用命令
java·大数据·开发语言·python·scala
__lost16 小时前
Pysides6 Python3.10 Qt 画一个时钟
python·qt