dataframe 如何选中某列的一行_带你领略pandas中多表之间如何处理

51f93dd4285e3b38544026e14bc2735e.png

但我们在处理Pandas多表数据时,我们需要将多个表之间进行表格的连接与合并,当连接完多表之后我们可能还需要对数据进行多重的索引,方便我们更快的找到数据,以及对数据进行做透视表,更加直观的去观察我们的数据,今天我们就围绕着数据合并以及数据重塑及透视表进行展开讲解,让我们去了解在Pandas中如何去这么操作数据。

一、数据合并

1、连接表,

在我们获得数据的时候可能数据并不完整,而我们需要将这些不完整的数据合并到一起组成一个完整的数据,下面我们对数据进行合并的操作。

  • 创建3个DataFrame表格
af0d42aafc7484680fa41bcd51da37a6.png

查看一下三个表的数据

d4949db8ad1e19fc697c9eddabb8ee58.png
acdd33e740493b12f0df636ddb5b049b.png
d9eaecc4e45d2fbf7292df88539bb965.png
  1. 将表格通过concat()方法进行合并

Concat参数如下

Objs(必须参数)

参与连接的pandas对象的列表或字典

Axis

指名连接的轴向,默认为0

Join

选中inner或outer(默认),其他轴向上索引是按交集(inner)还是并集(outer)进行合并

Join_axes

指名用于其他N-1条轴的索引,不执行并集/交集运算

Keys

与连接对象有关的值,用于形成连接轴向上的层次化索引。可以是任意值的列表、数组、元组数组和数组列表(如果需要将levels设置成多级数组的话)

Levels

指定用作层次化索引各级别的索引,如果设置了keys的话

Names

用于创建分层级别的名称,如果设置了keys或levels的话

Verify_integrity

检查结果对象新轴上的重复情况,如果发则引发异常。默认为(false)允许重复

Ignore_index

不保留连接轴上的索引,产生一组新索引range

9bfab199716248520ec47bc030020e0a.png
  • 通过keys参数设置连接df1、df2、df3的值为x、y、z
ab2921a189f683d93bb8f854211e8632.png
  • 新增加一个df4表,横向连接到df1表的第2、3、6、7列
dfbc1b254f59a39bcdcc6a9936eae4a6.png
  • 将df1和df4横向进行交集合并
e98f48d84933723e7419fe3c60dfa2fb.png

可以看出,合并后的数据为df1和df4都有的索引行进行合并的

  • 按照df1的索引进行df1表和df4表的横向索引
3b57412afafa40109c6ac2d317e455ef.png
  • 结果可以看出合并是按照df1表的索引进行合并的。通过append()方法连接表格连接df1和df2
405653261dd5cfbbe7795c715309c927.png
  • 连接df1和df4表
8ec4aa96435e365bf5e25789e74e84a2.png

可以看出在合并的数据中原表中没有的索引和列值都填充为了NaN缺失值。

  • 连接df1、df2、df3表
2cffb17c07c15eb44a6e37df437d1ef3.png
  • 忽略连接轴上的上的索引
26108143ca0f5ee5cf9e4e836eebc26f.png
  • 新增加一个s1表,并且跟df1进行横向合并
3263710ca9e6467df98d16f95a02b440.png
  • 新增加一个s2表,并且跟df1进行多次连接
8a00467f8a031d25a65cdb1845e5ef28.png

结果可以看出,s2表中的数据并未确定列名,那么系统就自动的从0开始进行列名的名称。

  • 表格合并后不保留原有的索引列名
e56e58bce9921b42fb8797165c416baf.png

表格合并后将原有的列名全部替换为一个range()序列

1.3、附加行

3788cb3ec52ab95898c17a86ac1d837e.png
9676d5a7fe4c671d9783ec1fe2ae4c19.png
ea3e5d5d3de2f9ab0388763248b161f9.png

结尾可以看出,合并后将s2中的数据作为附加行跟在了df1表的后面

2、数据库风格的DataFrame连接/合并

2.1、单个键进行连接

  • 创建两个表格并查看
7b7f7ba70c874daaacfac09de765edf3.png
  • 将key作为两个表连接的中介
171755cfae13fff788da79f91777c444.png

2.2、多个键进行连接

  • 创建两个表格,然后将表格以Key1和key2作为中介进行连接
838b1f900d35ae5787d70abe33ec4f5b.png

可以看出左右表以共同存在的key1、key2的行作为取出元素的依据,只取出了前三行,left表中的第四行为k2、k1,right表中的第四行为k2、k0,并不匹配所以没有进行取值。

  • 以左表为主导进行连接,连接以key1,key2作为连接中介进行取值
e40a02e7acc817601921f64a292d017b.png

可以看出这次连接是以left表汇总的key1 、key2作为主键进行连接,right表中的不存在的主键元素则以NaN代替。

  • 以右表的key1、key2位主键进行连接
e39ebe37f2671c2a0571dbdb90709a54.png
  • 以两个表所有的key1、key2的元素都取出来
c4ce3792e1afe5d8e88aec2ebe7e027d.png
  • 当两个表列名相同时进行合并
1ec2c6428f7bc76cd86003dd299bbd34.png

列名相同时则会重新命名列名

2.3、合并指示符

  • 以并集进行合并
e4b57519f531ef57fb445117b262ad97.png

也可以使用字符串作为参数替代True,字符串会作为该列的列名称。

28f0b0af86a6beb15436b7510d51376a.png

2.4、通过索引进行连接

  • 通过左表索引连接右表
768bb7eafd12ceb03be2e3183ad0ae45.png
  • 左表连接右表,求并集的形式
c23f1c02fbc10c4e8188e69afebdcca3.png
7e33b7bc623227907301cffa84e7bbaf.png
  • 左表连右表,求交集的形式
434a063f21bdd1f40f3d9bf0cdc0a347.png
d51bd5ac1f49953dc8bc04560181fa17.png

2.5、通过索引和某列连接

ac62b1503caa4e15ed629d25c136e1fe.png

通过结果可以看出,right表中的数据重复了一遍。

2.6、重叠列名称的合并

30eb28dce0ef04a5294ce4351f04c889.png

2.7、数据框拼接

3853cf7549ddd6d0a3d0d22b4d8fa225.png
3326ad9a36ba360e174c37485edb5959.png

如果都存在的值以传入的数据为准

5cf6988dc0e4a7a5293f1d66a42743ef.png

二、数据重塑及透视表

1、多重索引

  • 创建表格并查看
af541351edc8f40ada4f778095329f1e.png
  • 查看animal和hair_length下的所有数据
3059053890b29059fb8dbb70c76879a7.png

或者以一级标题或二级标题进行查看

340af66097b5219569a127c051b4b078.png
  • 创建表格并查看
e82fb0cbcb1458dce5c7130f759e6ea0.png

使用level参数进行调用

  • 查看exp下面的属性值
7b9ee333177c0ec6a7a131352f20eb50.png
  • 查看anmal下面的属性值
943ffeb56834e66fb3434aa7b8208044.png
  • 调用数据
32e17685dc2c5d032ea633ceed7faffe.png
f3b9d4ba87c3eab287a4eb75f586cd44.png
  • 调用first数据
44eb0595b20109912f220400f5bd725e.png
  • 调用second数据
2ccaae2c7dcce350a852d7ecfa2926f3.png

2、透视表

  • 创建一个透视表
5e9e2d3f6bcb5fbd7b49a58d14f55e5f.png
  • 查看D列,索引为A,B,列为C的所有数据
3cf104bb551f424365950028c44954ea.png
  • 查看D列,索引为B,列为A,C的所有数据求和
a0749159ced8af00139fbc4e2858a0f1.png
  • 查看DE列,索引为B,列为A,C的求和数据
1607c98a95ecee33eb231fc0c62a3fa5.png
  • 查看索引为A,B,列为C的数据
7e2a2724b9ce8fd0fe9d75101c58ce48.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/566973.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java的数列极差_[hoj]数列极差问题 | 学步园

贪心。关键是证明子问题最优即是总问题最优。可以考虑三个数的情况&#xff0c;易证选取最小的数擦除将得到最大数&#xff0c;vice versa 。故总体也是如此。用优先队列实现。STL自带仿函数greater<>用于调整小顶堆。#include #include using namespace std;int main(){…

python计算定积分_python编程通过蒙特卡洛法计算定积分详解

这篇文章主要介绍了python编程通过蒙特卡洛法计算定积分详解&#xff0c;具有一定借鉴价值&#xff0c;需要的朋友可以参考下。 想当初&#xff0c;考研的时候要是知道有这么个好东西&#xff0c;计算定积分。。。开玩笑&#xff0c;那时候计算定积分根本没有这么简单的。但这确…

java容易掉发吗_容易被忽略的面试题—Java高并发

常见实现如CAS等。部分乐观锁削弱了一致性&#xff0c;但中低并发程度下的效率大大提高。并发编程Java中如何创建一个线程&#xff1f;从面相接口的角度上讲&#xff0c;实际上只有一种方法实现Runable接口&#xff1b;但Thread类为线程操作提供了更多的支持&#xff0c;所以通…

java spring mvc api_SpringMVC实现REST API

JSON使用Jackson jar包、RequestBody、ResponseBody注解&#xff0c;达到&#xff1a;1. 请求JSON消息体映射为JAVA对象2. 返回JAVA对象映射为JSON消息体Step 1. 导入Jackson jar包&#xff1a;Step 2. 在Spring MVC配置中加入annotation-driven&#xff0c;该配置可以确保Requ…

java 定义构造器_java的构造器定义以及使用

构造器&#xff0c;是面向对象所特有的概念&#xff0c;是一种特殊的方法&#xff0c;与对象创建有关1、构造器没有返回值类型2、构造器方法名与类名相同&#xff0c;而且可以重载构造器3、构造器不能手动调用&#xff0c;只能在创建对象时自动调用一次4、如果没有在类中定义构…

gateway动态路由_无语!SpringCloud Gateway动态路由之Nacos,我已经讲得很清楚了

前言当我们的网关Gateway程序开发完成之后&#xff0c;需要部署到生产环境&#xff0c;这个时候你的程序不能是单点运行的&#xff0c;肯定是多节点启动(独立部署或者docker等容器部署)&#xff0c;防止单节点故障导致整个服务不能访问&#xff0c;网关是对客户端的入口与出口&…

json里面的list数据取不出来_sql盲注的困局:利用DNSlog快速导出数据

对于一个sql注入点来说最幸运的就是支持堆叠注入&#xff0c;最蛋疼的就是盲注&#xff0c;盲注里面难搞的就是基于时间的盲注。我们在本地利用这段代码进行演示<?php error_reporting(0); $link mysqli_connect(localhost,root,root); mysqli_set_charset($link,utf8); m…

python判断文件是否打开_python如何判断一个文件是否处于打开状态?

请问你的是linux吗&#xff1f;如果是linux可以借助/proc来获取。 import os class File(object): def __init__(self, file_path): if not os.path.exists(file_path): raise OSError({file_path} not exist.format(file_path file_path)) self.file_path os.path.abspath(f…

python怎么测试程序_python如何测试程序

测试函数是用于自动化测试&#xff0c;使用python模块中的unittest中的工具来测试 附上书中摘抄来的代码&#xff1a;#codingutf-8 import unittest from name_function import get_formatted_name class NamesTestCase(unittest.TestCase): def test_first_last_name(self): f…

判定覆盖白盒测试java_白盒测试系列(四)条件判定覆盖

条件判定覆盖一、定义&#xff1a;程序中每个判定至少有一次为真值&#xff0c;有一次为假值,使得程序中每个分支至少执行一次&#xff0c;且使得各判定中的每个条件获得各种可能的取值至少满足一次。二、特点&#xff1a;1、综合了条件覆盖和判定覆盖的特点2、满足条件判定覆盖…

discard python_Netty入门教程(一) 实现DISCARD服务

官方那个给出的介绍是&#xff1a;Netty是由JBOSS提供的一个java开源框架。Netty提供异步的、事件驱动的网络应用程序框架和工具&#xff0c;用以快速开发高性能、高可靠性的网络服务器和客户端程序。然后我们简单理解一下&#xff0c;这玩意就是个程序&#xff0c;干什么的&am…

python 每天执行一次_python 定时器每天就执行一次的实现代码

1.实现功能编写python脚本一直运行&#xff0c;判断当下是否是新的一天&#xff0c;如果是就执行一次任务代码2.具体实现代码#-*-coding:utf-8 -*-__author__ Administratorimport os,threading,timecurTimetime.strftime("%Y-%M-%D",time.localtime())#记录当前时间…

python 类的内置方法_【转】[python] 类常用的内置方法

原文&#xff1a;http://xukaizijian.blog.163.com/blog/static/170433119201111894228877/ 内置方法 说明 __init__(self,...) 初始化对象&#xff0c;在创建新对象时调用 __del__(self) 释放对象&#xff0c;在对象被删除之前调用 __new__(cls,*args,**kwd) 实例的生成操作 _…

java 文件与base64_java之文件与base64字符之间的相互转换

package cn.xuanyuan.util;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import sun.misc.BASE64Decoder;import sun.misc.BASE64Encoder;public class FileUitl {/*** 将文件转成base64 字符串* param path文件路径* return ** thro…

python向量化编程技巧_神经网络基础之Python与向量化

Vectorization 深度学习算法中&#xff0c;数据量很大&#xff0c;在程序中尽量减少使用loop循环语句&#xff0c;而可以使用向量运算来提高程序运行速度。 向量化(Vectorization)就是利用矩阵运算的思想&#xff0c;大大提高运算速度。例如下面所示在Python中使用向量化要比使…

java 父子线程 调用链_ZipKin原理学习--Zipkin多线程及线程池中追踪一致性问题解决...

在学习Zipkin分布式追踪系统中我们了解到Trace在整个调用链是一致的&#xff0c;在web服务中可以通过在header设置Trace值在不同的服务中进行传递&#xff0c;那样在一个服务内部不同的线程&#xff0c;甚至是线程池中Zipkin是如何处理的&#xff0c;接下来我们来了解学习一下。…

SQL server 数据库面试题及答案(实操2)

使用你的名字创建一个数据库 创建表&#xff1a; 数据库中有三张表&#xff0c;分别为student,course,SC&#xff08;即学生表&#xff0c;课程表&#xff0c;选课表&#xff09; 问题&#xff1a; --1.分别查询学生表和学生修课表中的全部数据。--2.查询成绩在70到80分之间…

python电子相册制作软件_电子相册怎么做

电子相册制作 本文来自#千兆网络有什么用#征稿活动&#xff0c;不断提速的网络给你的生活带来了什么变化&#xff1f;快来参与活动&#xff0c;聊聊你玩转互联网&#xff0c;高速网上冲浪的经历&#xff01;>点击这里查看活动详情< 现在手机的拍照功能日趋强大&#xff0…

java list 范围删除_JAVA中循环删除list中元素(移除list两时间范围外的元素)

印象中循环删除list中的元素使用for循环的方式是有问题的&#xff0c;但是可以使用增强的for循环&#xff0c;然后今天在使用时发现报错了&#xff0c;然后去科普了一下&#xff0c;再然后发现这是一个误区。下面就来讲一讲。。伸手党可直接跳至文末。看总结。。JAVA中循环遍历…

python标注审核_Python类型标注

机器学习越来越火&#xff0c;大量的机器学习包都支持Python&#xff0c;导致了Python近几年非常火爆&#xff0c;入手门槛低&#xff0c;编程简单&#xff0c;概念非常少。越来越多的新手小白加入到Python编程。 Python虽然简单&#xff0c;但也带来很多问题。尤其是弱类型一直…