解决dataframe格式表格的合并

2023-11-19

这几天遇到了一个关于表格合并的问题,其实问题很简单。对于两个表格df1和df2,取出df1的每一行特征和df2的每一行的特征合并,再将label合并。但是看了很多pandas关于表的合并,其并不适用到我这个问题,所以在此我想简单的总结一下关于pandas的表格合并方法和解决我自身问题的解决方法(主要)。

问题描述

df1:

f_1 f_2 label_1
1 1 1
2 2 1

df2:

f_3 label_2
3 0
4 0

目标

df3:

f_1 f_2 f_3 label_3
1 1 3 1
1 1 4 1
2 2 3 1
2 2 4 1

其实这就是一个很简单的两个for循环叠加在一起的问题,但是其本身的格式问题,合并起来较为麻烦

解决方法一:
使用concat函数来拼接两个表格

concat(objs,axis=0,join='outer',join_axes=None,ignore_index=False,keys=None,levels=None,names=None,verigy_integrity=False)

axis参数可以确定是行拼接(取0),还是列拼接(取1),但是列的拼接存在一个问题就是,他拼接的过程是按照行号合并的,换句话说就是相同的一行拼接成一个,反之拼接成两行
代码:

data1 = pd.read_csv('data/data_date.csv',header=None)
data2 = pd.read_csv('data/data_id.csv',header=None)
for i in range(len(data1)):
    for j in range(len(data2)):
        data3 = pd.concat([data1.iloc[[i],0:-1],data2.iloc[[j],0:-1]],axis=1)

当i=j时,合并成一行,不同时合并成两行
例如

data3 = pd.concat([data1.iloc[[1],0:-1],data2.iloc[[2],0:-1]],axis=1,join='outer')
print(data3)
data4 = pd.concat([data1.iloc[[1],0:-1],data2.iloc[[1],0:-1]],axis=1,join='outer')
print(data4)

#输出结果
     0    0    1
1    3  NaN  NaN
2  NaN    2    2

   0  0  1
1  3  1  1

所以就存在很大的局限,不同的行号就不能合成一行。

除此之外,join可以选择的是取交集还是并集,但是这个并集的前提是合并的两个表格存在相同的列,从而进行合并。

解决方法二:
使用append()函数来解决,即

data3 =data1.iloc[[0],0:-1]
data4 = data2.iloc[[1],0:-1]
data3.append(data4,ignore_index=True)
print(data3)
#输出结果
   0    1
0  3  NaN
1  2    2

这种方法其实append是series和dataframe的方法,使用它就是默认沿着列进行凭借(axis = 0,列对齐),所以并不能达到我们的要求。merge的合并方法得到与append函数得到的结果一样,再次不赘述。

解决方法三:
将表格转化成list,进行list操作

首先将dataframe转化成list

data3 = data1.values
data3 = np.array(data3).tolist() #从标签开始记数

data4 = data2.values
data4 = np.array(data4).tolist()

注意这里的list第一行是包含原先的dataframe的index的,所以从第二行开始才是数据。

data = []#存储新生成的list
for i in range(1,len(data3)):
    for j in range(1,len(data4)):
        data5 = data3[i][1:-1] +data4[j][1:-1] #合并所有的特征数据
        data5.append(data3[i][-1]+data4[j][-1])#对两个表格的label进行合并
        data.append(data5)

对两个list进行合并,label合并,使用append()函数添加到data5中完成一行,最后保存到data这个list中去成为一行数据。

test=pd.DataFrame(data=data)
test.to_csv("ConData/data.csv", encoding="utf-8")
print(data)

因为list格式的数据不能转化为csv格式数据,所以我们将list转化为dataframe格式数据,再存储起来。

完整代码:

data1 = pd.read_csv('data/data_date.csv',header=None)
data2 = pd.read_csv('data/data_id.csv',header=None)

data3 = data1.values
data3 = np.array(data3).tolist() #从标签开始记数

data4 = data2.values
data4 = np.array(data4).tolist()

data = []
for i in range(1,len(data3)):
    for j in range(1,len(data4)):
        data5 = data3[i][1:10] +data4[j][1:10]
        data5.append(data3[i][-1]+data4[j][-1])
        data.append(data5)
# print(data)
test=pd.DataFrame(data=data)
test.to_csv("ConData/data.csv", encoding="utf-8")
print(data)

这篇博客没有详细讲解merge,concat的用法,主要说的是自己遇到的实际问题的解决方法。因为concat使用这些都能在网上找到,如以下这些:
https://blog.csdn.net/zutsoft/article/details/51498026
https://blog.csdn.net/milton2017/article/details/54406482/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

解决dataframe格式表格的合并 的相关文章

随机推荐

  • VS 2022使用报错(一)

    1 NET框架不兼容 发生背景 博主最近打开同事的源代码发现许多引用都无效了 中间我尝试删除了这些引用 在重新添加引用的时候都找不到这些了 最后发现是解决方案里面没有配置 NET框架 问题解决 配置 NET框架 右键项目属性 在目标框架里面
  • python搭建ip池(多线程)

    之前有讲过怎么搭建ip池 但由于单线程的效率太低 于是我们升级改造一下 将单线程变成多线程来搭建ip池 之前的方法可以参考一下 python搭建ip池 如果会简单的request和提取文字就可以直接不看 本文将会重点放在多线程的部分 过程分
  • 微软个人云端服务器在哪里找,云端的服务器在哪里

    云端的服务器在哪里 内容精选 换一换 智能边缘平台 Intelligent EdgeFabric 通过纳管用户的边缘节点 提供将云上应用延伸到边缘的能力 联动边缘和云端的数据 同时 在云端提供统一的边缘节点 应用监控 日志采集等运维能力 为
  • python基础:面向对象一些简单案例:计算圆的面积和周长,烤羊肉串

    1 计算圆的面积和周长 from math import pi class Circle def init self r self r r def zhouchang self return 2 pi self r def area sel
  • shell编程计算1-1000中所有3或5的倍数之和

    bin bash sum 0 int 1 while int lt 1000 do if int 3 0 int 5 0 then sum sum int fi let int done echo sum bin bash sum 0 fo
  • Spring Security 自定义用户认证

    一 PasswordEncoder 在 Configuration注解的类下注入bean import org springframework security crypto bcrypt BCryptPasswordEncoder imp
  • C++ 数据类型

    使用编程语言进行编程时 需要用到各种变量来存储各种信息 变量保留的是它所存储的值的内存位置 这意味着 当创建一个变量时 就会在内存中保留一些空间 可能需要存储各种数据类型 比如字符型 宽字符型 整型 浮点型 双浮点型 布尔型等 的信息 操作
  • AI绘图实战(六):制作一张庆祝五一劳动节的海报

    S AI能取代设计师么 I 至少在设计行业 目前AI扮演的主要角色还是超级工具 要顶替 除非甲方对设计效果无所畏惧 预先学习 安装及其问题解决参考 Windows安装Stable Diffusion WebUI及问题解决记录 运行使用时问题
  • JUMPSERVER+ZABBIX二次开发

    未完待续 1 apps assets models assets py 添加字段 zabbix group id models IntegerField null True blank True verbose name Zabbix Gr
  • Rust对文件的操作

    一 文件IO操作 在类unix系统中 一切都是文件 所以说广义的文件操作 其实包括很多 Socket 管道 内存映射等等 其实文件操作无论怎么变化 主流仍然是对外设的访问 计算机本身的组成 是一系列的硬件整合在一起的 单纯的只有CPU和内存
  • WSL 2是什么

    Windows Subsystem for Linux WSL 适用于 Linux 的 Windows 子系统是微软在Windows 10上提供的一项供用户快速运行Linux命令和工具的功能 相比前一代的WSL WSL 2提供更全的兼容性
  • 【vue2】vue2中引入jquery

    文章目录 安装 main js中引用 修改webpack配置 把以下三步做好 就不会出现 jquery is not define 的问题了 安装 npm i jquery S main js中引用 import from jquery V
  • 918. 环形子数组的最大和

    918 环形子数组的最大和 难度中等192 给定一个由整数数组 A 表示的环形数组 C 求 C 的非空子数组的最大可能和 在此处 环形数组意味着数组的末端将会与开头相连呈环状 形式上 当0 lt i lt A length 时 C i A
  • Docker安装RabbitMQ docker安装RabbitMQ完整详细教程

    Docker安装RabbitMQ docker安装RabbitMQ完整详细教程 Docker 上安装 RabbitMQ 3 12 的步骤 选择要安装的RabbitMQ 版本 1 拉取 RabbitMQ 镜像 2 创建并运行容器 3 Rabb
  • H5移动端便捷兼容测试方式

    一 准备 1 谷歌浏览器 2 H链接 3 主流设备分辨率 尺寸 二 步骤 1 打开F12 选择手机模式 2 看顶部设备信息 点击 县级弹窗最底部的edit进入编辑模式 3 添加想要测试的设备 设备的宽高需要按照手机的分辨率和像素值计算 以i
  • Oracle的三种高可用集群方案

    转载自 http www cnblogs com baiboy p orc2 html label1 Oracle的三种高可用集群方案 1 RAC Real Application Clusters 多个Oracle服务器组成一个共享的Ca
  • Java 基本数据类型之间的运算规则

    博主前些天发现了一个巨牛的人工智能学习网站 通俗易懂 风趣幽默 忍不住也分享一下给大家 点击跳转到网站 前言 这里只讨论七种基本数据类型变量间的运算 不包含boolean类型的 1 自动类型提升 结论 当容量小的数据类型的变量与容量大的数据
  • 水果识别系统-tensorflow项目

    介绍 水果识别系统 可识别15种水果 人工智能 机器学习 模式识别项目 编程语言Python 基于tensorflow机器学习库通过卷积神经网络对数据集进行训练 经过多次迭代训练得到模型 预测精度达到99 技术栈 python tensor
  • Spring AOP、拦截器、过滤器的区别

    一 区别与概念 Filter过滤器 拦截web访问url地址 Interceptor拦截器 拦截以 action结尾的url 拦截Action的访问 Spring AOP拦截器 只能拦截Spring管理Bean的访问 业务层Service
  • 解决dataframe格式表格的合并

    这几天遇到了一个关于表格合并的问题 其实问题很简单 对于两个表格df1和df2 取出df1的每一行特征和df2的每一行的特征合并 再将label合并 但是看了很多pandas关于表的合并 其并不适用到我这个问题 所以在此我想简单的总结一下关