pandas——DataFrame基本操作(二)【建议收藏】

news2024/11/26 22:22:07

pandas——DataFrame基本操作(二)


文章目录

  • pandas——DataFrame基本操作(二)
  • 一、实验目的
  • 二、实验原理
  • 三、实验环境
  • 四、实验内容
  • 五、实验步骤
    • 1.修改数据
    • 2.缺失值
    • 3.合并
      • 1.concat合并
      • 2.使用append方法合并
      • 3.使用merge进行合并
      • 4.使用join进行连接


一、实验目的

熟练掌握pandas中DataFrame的修改元素值、缺失值处理、合并操作的方法

二、实验原理

concat合并:

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

objs: series,dataframe或者是panel构成的序列lsit。

axis: 需要合并链接的轴,0是行,1是列,默认为axis=0。

join:连接的方式 inner,或者outer,默认为join=‘outer’

keys:合并的同时增加分区。

ignore_index:忽略索引,默认为False,当为True时,合并的两表就按列字段对齐。

merge合并:
pandas的merge方法提供了一种类似于SQL的内存链接操作,官网文档提到它的性能会比其他开源语言的数据操作(例如R)要高效。

pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None,
         left_index=False, right_index=False, sort=True,
         suffixes=('_x', '_y'), copy=True, indicator=False,validate=None)

merge的参数:

left/right:两个不同的DataFrame

on:指的是用于连接的列索引名称。必须存在左右两个DataFrame对象中,如果没有指定且其他参数也未指定则以两个DataFrame的列名交集做为连接键

left_on:左则DataFrame中用作连接键的列名;这个参数中左右列名不相同,但代表的含义相同时非常有用。right_on:右则DataFrame中用作 连接键的列名。

left_index:使用左则DataFrame中的行索引做为连接键。

right_index:使用右则DataFrame中的行索引做为连接键。

how:指的是合并(连接)的方式有inner(内连接),left(左外连接),right(右外连接),outer(全外连接);默认为inner。

sort:根据DataFrame合并的keys按字典顺序排序,默认是True,如果置false可以提高表现。

suffixes:字符串值组成的元组,用于指定当左右DataFrame存在相同列名时在列名后面附加的后缀名称,默认为(‘_x’,‘_y’)

copy:默认为True,总是将数据复制到数据结构中;大多数情况下设置为False可以提高性能

indicator:在 0.17.0中还增加了一个显示合并数据中来源情况;如只来自于左边(left_only)、两者(both)。

merge的默认合并方法:merge用于表内部基于 index-on-index 和 index-on-column(s) 的合并,但默认是基于index来合并。

join连接:
主要用于索引上的合并

join(self, other, on=None, how='left', lsuffix='', rsuffix='',sort=False)

其中参数的意义与merge方法基本相同,只是join方法默认为左外连接how=left

1.默认按索引合并,可以合并相同或相似的索引,不管他们有没有重叠列。

2.可以连接多个DataFrame

3.可以连接除索引外的其他列

4.连接方式用参数how控制

5.通过lsuffix=‘’, rsuffix=‘’ 区分相同列名的列

三、实验环境

Python 3.6.1以上

jupyter notebook

四、实验内容

练习pandas中DataFrame的修改元素值、缺失值处理、合并操作。

五、实验步骤

1.修改数据

1.通过字典对象创建一个DataFrame。

import numpy as np
import pandas as pd
dates = pd.date_range('20130101', periods=6)
df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD'))
print(df)

在这里插入图片描述

2.新建一个值为[1,2,3,4,5,6],索引index为2013-01-02到2013-01-07的Series,并将series赋值给df作为df新增的F列。

s1=pd.Series([1,2,3,4,5,6],index=pd.date_range('20130102',periods=6))
print(s1)
df['F']=s1
print(df)

在这里插入图片描述

3.使用loc方法把df的D列值修改为5*len(df)。

df.loc[:,'D']=np.array([5]*len(df))
print(df)

在这里插入图片描述

4.使用copy方法将df赋值给df2,使用where语句将df2中满足df2>0条件的值修改为-df2。

df2=df.copy()
df2[df2>0]=-df2
print(df2)

在这里插入图片描述

2.缺失值

1.使用reindex方法将df的行列索引同时重新索引,使行index=date[0:4],列索引culumns=list(df.columns+[‘E’]),并返回一个新的数据帧df1,然后使用loc方法将df1中行索引为dates[0]和dates[1],列为“E"的值修改为1。

df1=df.reindex(index=dates[0:4],columns=list(df.columns)+['E'])
print(df1)
df1.loc[dates[0]:dates[1],'E']=1
print(df1)

在这里插入图片描述

2.使用dropna方法删除df1中任何包含缺失值的行。

df1.dropna(how='any')

在这里插入图片描述

3.使用fillna方法,将df1中所有的缺失值用5填充。

print(df1)
df1.fillna(value=5)

在这里插入图片描述

4.使用isnull方法判断df1中的值是否为缺失值,是缺失值返回True,否则返回False,返回一个由布尔值组成的数据帧。

pd.isnull(df1) 

在这里插入图片描述

5.使用notnull判断df1中的值是否为缺失值,返回一个由布尔值组成的数据帧。

pd.notnull(df1)

在这里插入图片描述

3.合并

1.concat合并

1.创建数据帧df1、df2、df3,使用concat函数将df1\df2\df3进行合并。

df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'], 'B': ['B0', 'B1', 'B2', 'B3'],'C': ['C0', 'C1', 'C2', 'C3'],'D': ['D0', 'D1', 'D2', 'D3']},index=[0, 1, 2, 3])
df2 = pd.DataFrame({'A': ['A4', 'A5', 'A6', 'A7'],'B': ['B4', 'B5', 'B6', 'B7'],'C': ['C4', 'C5', 'C6', 'C7'],'D': ['D4', 'D5', 'D6', 'D7']},index=[4, 5, 6, 7])
df3 = pd.DataFrame({'A': ['A8', 'A9', 'A10', 'A11'],'B': ['B8', 'B9', 'B10', 'B11'],'C': ['C8', 'C9', 'C10', 'C11'],'D': ['D8', 'D9', 'D10', 'D11']},index=[8, 9, 10, 11])
result = pd.concat([df1,df2,df3])
print('df1:\n',df1,'\ndf2:\n',df2,'\ndf3:\n','\nresult:\n',result)

在这里插入图片描述

2.将df1,df2,df3进行合并,并将合并后的数据帧进行分区为keys=[‘x’,‘y’,‘z’]。

result1 = pd.concat([df1,df2,df3], keys=['x', 'y', 'z'])
print(result1)

在这里插入图片描述

3.新建一个数据帧df4,将df1与df4进行列项合并,axis=1。

df4 = pd.DataFrame({'B': ['B2', 'B3', 'B6', 'B7'],'D': ['D2', 'D3', 'D6', 'D7'],'F': ['F2', 'F3', 'F6', 'F7']},index=[2, 3, 6, 7])
result2=pd.concat([df1,df4],axis=1)
print(result2)

在这里插入图片描述

4.df1与df4进行列项合并axis=1,合并方式为内部合并join=‘inner’。

result3=pd.concat([df1,df4],axis=1,join='inner')
print(result3)

在这里插入图片描述

2.使用append方法合并

1.使用append方法将df1与df2合并。

df1.append(df2)

在这里插入图片描述

2.使用append方法将df1与df4合并。

df1.append(df4)

在这里插入图片描述

3…使用append方法将df1与df2、df3合并。

df1.append([df2,df3])

在这里插入图片描述

3.使用merge进行合并

1.创建两个数据帧left、right,使用merge函数按key列将left与right进行连接。

left = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],'A': ['A0', 'A1', 'A2', 'A3'], 'B': ['B0', 'B1', 'B2', 'B3']})
right = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],'C': ['C0', 'C1', 'C2', 'C3'], 'D': ['D0', 'D1', 'D2', 'D3']})
result = pd.merge(left, right, on='key')
print( left,right,result)

在这里插入图片描述

2.复合key的合并方法,使用merge的时候可以选择多个key作为复合可以来对齐合并。

创建两个数据帧left、right,使用merge函数按[key1,key2]列将left与right进行连接。

left = pd.DataFrame({'key1': ['K0', 'K0', 'K1', 'K2'], 'key2': ['K0', 'K1', 'K0', 'K1'],'A': ['A0', 'A1', 'A2', 'A3'],'B': ['B0', 'B1', 'B2', 'B3']})
right = pd.DataFrame({'key1': ['K0', 'K1', 'K1', 'K2'],'key2': ['K0', 'K0', 'K0', 'K0'],'C': ['C0', 'C1', 'C2', 'C3'],'D': ['D0', 'D1', 'D2', 'D3']})
result = pd.merge(left, right, on=['key1', 'key2'])
print( left,right,result)

在这里插入图片描述

3.使用merge函数按[key1,key2]列将left与right进行左表连接。

left = pd.DataFrame({'key1': ['K0', 'K0', 'K1', 'K2'], 'key2': ['K0', 'K1', 'K0', 'K1'],'A': ['A0', 'A1', 'A2', 'A3'],'B': ['B0', 'B1', 'B2', 'B3']})
right = pd.DataFrame({'key1': ['K0', 'K1', 'K1', 'K2'],'key2': ['K0', 'K0', 'K0', 'K0'],'C': ['C0', 'C1', 'C2', 'C3'],'D': ['D0', 'D1', 'D2', 'D3']})
result = pd.merge(left, right, how='left', on=['key1', 'key2'])
print( left,right,result)

在这里插入图片描述

4.使用merge函数按[key1,key2]列将left与right进行右表连接。

result = pd.merge(left, right, how='right', on=['key1', 'key2'])
print(result)

在这里插入图片描述

5.使用merge函数按[key1,key2]列将left与right进行外表连接。

result = pd.merge(left, right, how='outer', on=['key1', 'key2'])
print(result)

在这里插入图片描述

6.使用merge函数按key1,key2列将left与right进行内表连接。

result = pd.merge(left, right, how='inner', on=['key1', 'key2'])
print(result)

在这里插入图片描述

7.创建两个都只有A、B两列的数据帧left,right,使用merge函数按B列将left与right进行外表连接,可以看到除连接列B以外的列名相同时,会在列名后加上区分的后缀。

left = pd.DataFrame({'A' : [1,2], 'B' : [2, 2]})
right = pd.DataFrame({'A' : [4,5,6], 'B': [2,2,2]})
result = pd.merge(left, right, on='B', how='outer')
print(result)

在这里插入图片描述

8.创建两个数据帧df1、df2,使用merge函数按col1列将df1与df2进行外表连接,并使用参数indicator显示出每列值在合并列中是否出现。

df1 = pd.DataFrame({'col1': [0, 1], 'col_left':['a', 'b']})
df2 = pd.DataFrame({'col1': [1, 2, 2],'col_right':[2, 2, 2]})
pd.merge(df1, df2, on='col1', how='outer', indicator=True)

在这里插入图片描述

4.使用join进行连接

1.创建两个数据帧left、right,使用join方法将left与right连接。

left = pd.DataFrame({'A': ['A0', 'A1', 'A2'],'B': ['B0', 'B1', 'B2']},index=['K0', 'K1', 'K2'])
right = pd.DataFrame({'C': ['C0', 'C2', 'C3'],'D': ['D0', 'D2', 'D3']},index=['K0', 'K2', 'K3'])
result = left.join(right)
print(left,'\n',right,'\n',result)

在这里插入图片描述

2.使用join方法将left与right进行外表连接

result = left.join(right, how='outer')
print(left,'\n',right,'\n',result)

在这里插入图片描述

3.使用join方法将left与right进行内表连接.

result = left.join(right, how='inner')
print(left,'\n',right,'\n',result)

在这里插入图片描述

4.创建两个数据帧left、right,使用join方法按key列将left与right连接。

left = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],'B': ['B0', 'B1', 'B2', 'B3'], 'key': ['K0', 'K1', 'K0', 'K1']})
right = pd.DataFrame({'C': ['C0', 'C1'],'D': ['D0', 'D1']},index=['K0', 'K1'])
result = left.join(right, on='key')
print(left,'\n',right,'\n',result)

在这里插入图片描述


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

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

相关文章

为什么实时ERP系统是唯一的出路?

长期以来,企业主不得不等待数天,有时甚至数周,才能获得财务和运营结果。今天,尤其是在我们可以使用高速计算机和实时技术的情况下,这绝不应该成为可接受的标准。 然而,太多的大牌ERP系统仍然使用批量处理…

2023年网络安全比赛--Web综合渗透测试中职组(超详细)

一、竞赛时间 180分钟 共计3小时 二、竞赛阶段 1.通过URL访问http://靶机IP/1,对该页面进行渗透测试,将完成后返回的结果内容作为FLAG值提交; 2.通过URL访问http://靶机IP/2,对该页面进行渗透测试,将完成后返回的结果内容作为FLAG值提交; 3.通过URL访问http://靶机IP/3,对…

CDN绕过技术总汇

注 本文首发于合天网安实验室 首发链接:https://mp.weixin.qq.com/s/9oeUpFUZ_0FUu6YAhQGuAg 近日HVV培训以及面试,有人问了CDN该如何绕过找到目标真实IP,这向来是个老生常谈的问题,而且网上大多都有,但是有些不够全面…

中国网站安全形式风险报告

声明 本文是学习2017中国网站安全形势分析报告. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 网站漏洞检测分析 网站漏洞的整体形势可以从两个角度分析:一是网站安全检测的自动扫描结果统计,二是网站被报告漏洞情况的统计。…

FreeRTOS队列 | FreeRTOS九

目录 说明: 一、队列简介 1.1、什么是队列 1.2、队列的优势 1.3、队列实现功能 1.4、队列使用了解 1.5、队列特点 1.6、队列阻塞处理 1.7、队列出队入队过程 二、队列结构体 2.1、结构体了解 2.2、共同体了解 2.3、队列结构体存储区 三、队列API函数 …

nacos配置中心搭建

网站每次更新版本都有短暂暂停,影响用户使用,返回经常不可用,需要改进 需要实现高可用,搭建负载均衡,实现jenkinsnacos不停机部署 nacos搭建预备环境准备 64 bit OS,支持 Linux/Unix/Mac/Windows&#x…

vue2.0项目第一部分

论坛项目后端管理系统服务器地址:http://172.16.11.18:9090swagger地址:http://172.16.11.18:9090/doc.html前端h5地址:http://172.16.11.18:9099/h5/#/前端管理系统地址:http://172.16.11.18:9099/admin/#/搭建项目vue create . …

JavaScript 变量提升

文章目录JavaScript 变量提升JavaScript 初始化不会提升在头部声明你的变量JavaScript 变量提升 JavaScript 中,函数及变量的声明都将被提升到函数的最顶部。 JavaScript 中,变量可以在使用后声明,也就是变量可以先使用再声明。 以下两个实…

前端面试题汇总

一:JavaScript 1、闭包是什么?利弊?如何解决弊端? 闭包是什么:JS中内层函数可以访问外层函数的变量,外层函数无法操作内存函数的变量的特性。我们把这个特性称作闭包。 闭包的好处: 隔离作用…

三、Linux文件 - Close函数讲解实战,文件权限

目录 1.Close函数 2.Linux文件权限 3.项目实战 3.1Close 项目实战1 3.2 文件权限项目实战 -Open函数设置权限 1.Close函数 参数说明 在Linux系统库的定义&#xff1a; int close(int fd) 包含的头文件 #include <unistd.h> 功能就是简单的关闭文件 注&#x…

荧光素标记PEG衍生物Fluorescein-PEG-Acid,FITC-PEG-COOH

英文名称&#xff1a;FITC-PEG-COOH&#xff0c;Fluorescein-PEG-Acid 中文名称&#xff1a;荧光素-聚乙二醇-羧基 荧光素标记的聚乙二醇PEG衍生物的荧光波长为495 nm&#xff0c;发射大约515 ~ 520 nm处有最大吸收。FITC组可以很容易地从它的黄色和绿色荧光。额外的功能&…

Python算法:深度优先搜索—DFS(模板及其样例)

深度优先搜索搜索 【介绍】 • 沿着一条路径一直搜索下去&#xff0c;在无法搜索时&#xff0c;回退到刚刚访问过的节点。 • 并且每个节点只能访问一次。 • 本质上是持续搜索&#xff0c;遍历了所有可能的情况&#xff0c;必然能得到解。 • 流程是一个树的形式&#xff0c;…

深度学习基础-机器学习基本原理

本文大部分内容参考《深度学习》书籍&#xff0c;从中抽取重要的知识点&#xff0c;并对部分概念和原理加以自己的总结&#xff0c;适合当作原书的补充资料阅读&#xff0c;也可当作快速阅览机器学习原理基础知识的参考资料。 前言 深度学习是机器学习的一个特定分支。我们要想…

项目管理的前路,前辈能给一些意见吗?

什么是项目管理&#xff1f;关于项目管理的解释主要是基于国际项目管理三大体系不同的解释及本领域权威专家的解释!!!! 项目管理就是以项目为对象的系统管理方法&#xff0c;通过一个临时性的、专门的柔性组织&#xff0c;对项目进行高效率的计划、组织、指导和控制&#xff0c…

活动目录(Active Directory)管理,AD自动化

每个IT管理员几乎每天都在Active Directory管理中面临许多挑战&#xff0c;尤其是在管理Active Directory用户帐户方面。手动配置用户属性非常耗时、令人厌烦且容易出错&#xff0c;尤其是在大型、复杂的 Windows 网络中。Active Directory管理员和IT经理大多必须执行重复和世俗…

关于Zebec生态的改进提案,即将上线的 Nautilus 链

概括 在最初作为 Solana 原生应用程序推出一年后&#xff0c;Zebec 团队已经能够通过在 BNB和NEAR区块链上成功部署来扩大其产品的范围。 凭借继续向尽可能多的公司/协议/基金提供薪资工具和基础设施的雄心勃勃的计划&#xff0c;我们决定采用最终将使 Zebec生态系统及其核心…

情人节又到了 程序员高逼格表白套路 附源码

又到了每月都有的情人节了&#xff08;笑&#xff09; 一个相当重要的日子&#xff1a;214&#xff0c;不知道是从啥时候开始兴起来的&#xff0c;单身的羡慕着有对象的&#xff0c;有对象的羡慕着单身的&#xff0c; 但也有很大一部分单身人士等待着表白的好机会&#xff0c;毕…

08.程序环境和预处理

1. 程序的翻译环境和执行环境在ANSI C的任何一种实现中&#xff0c;存在两个不同的环境。第1种是翻译环境&#xff0c;在这个环境中源代码被转换为可执行的机器指令。第2种是执行环境&#xff0c;它用于实际执行代码。2. 详解编译链接2.1 翻译环境 //.obg组成一个程序的每个源文…

力扣方法总结:其他数据结构(单调栈等)

单调栈 单调栈代码模板 找下一个更大&#xff08;不是大于等于&#xff09;元素 vector<int> nextGreaterElement(vector<int>& nums) {int n nums.size();vector<int> res(n, -1);stack<int> s;// 从后向前构建单调栈for (int i n - 1; i >…

在 Eclipse 中创建 Maven 项目

1.在 Eclipse 中配置 MavenEclipse 中默认自带 Maven 插件&#xff0c;但是自带的 Maven 插件不能修改本地仓库&#xff0c;所以通常我们不使用自带的 Maven &#xff0c;而是使用自己安装的&#xff0c;在 Eclipse 中配置 Maven 的步骤如下&#xff1a; 1) 点击 Eclipse 中的 …