pandas之DataFrame基础

news/2024/4/30 6:51:07/文章来源:https://blog.csdn.net/m0_46926492/article/details/130121993

pandas之DataFrame基础

  • 1. DataFrame定义
  • 2. DataFrame的创建形式
  • 3. DataFrame的属性
  • 4. DataFrame的运算
  • 5. pandas访问相关操作
    • 5.1 使用 loc[]显示访问
    • 5.2 iloc[] 隐式访问
    • 5.3 总结
  • 6. 单层索引和多层级索引
    • 6.1 索引种类与使用
    • 6.2 索引相关设置
    • 6.3 索引构造
    • 6.4 索引访问
    • 6.5 索引变换

1. DataFrame定义

  • DataFrame是一个二维的表格型数据结构,可以看做是由Series组成的字典(共用同一个索引)
  • DataFrame由按一定顺序排列的【多列】数据组成,每一列的数据类型可能不同
  • 设计初衷是将Series的使用场景从一维拓展到多维,DataFrame即有行索引,也有列索引

2. DataFrame的创建形式

  • 使用列表创建,并设置行索引列索引

    #data:构造DataFrame的数据
    pd.DataFrame(data=data, index=index, columns=columns)
    data=np.random.randint(0,100,size=(3,4))
    index=['tom','lucy','alex']
    columns=['语文','数学','物理','化学']
    df1=pd.DataFrame(data=data,index=index,columns=columns)
    
  • from dict of Series or dicts 使用一个由Series构造的字典或一个字典构造

    #通过字典套Series方式创造DataFrame
    names=pd.Series(data=['lucy','mery','tom'],index=list('ABC'))
    scores=pd.Series(data=np.random.randint(0,100,size=3),index=list('ABC'))
    df2=pd.DataFrame(data={"names":names,"scores":scores
    })
    
  • from dict of ndarrays/lists使用一个由列表或ndarray构造的字典构造,ndarrays必须长度保持一致

    #通过字典套列表创建DataFrame
    dic={'name':['user1','user2'],'score':[90,80]
    }
    df3=pd.DataFrame(data=dic)
    
  • from a list of dicts 使用一个由字典构成的列表构造

    #列表套字典创建DataFrame
    dic1={'name':'lucy','score':90
    }
    dic2={'name':'user','score':80
    }
    lis=[dic1,dic2]
    df4=pd.DataFrame(data=lis)
    
  • DataFrame.from_dict()函数构造

    #字典套ndarry构造
    names=['lucy','tom']
    yuwen=np.random.randint(0,100,size=2)
    shuxue=np.random.randint(0,100,size=2)
    dic={"name":names,"语文":yuwen,'数学':shuxue
    }
    df5=pd.DataFrame(data=dic)
    

3. DataFrame的属性

属性含义
index行索引
columns列索引
values
dtype列数据类型
score=pd.DataFrame(data={"name":pd.Series(data=['lucy','mery','tom'],index=list('ABC')),"score":pd.Series(data=np.random.randint(0,100,size=3),index=list('ABC'))
})
score.dtypes  #列数据类型   
# name     object
# score     int32
# dtype: objectscore.values  #获取所有值  array([['lucy', 66], ['mery', 88],['tom', 71]], dtype=object)
score.index  #列索引  Index(['A', 'B', 'C'], dtype='object')
score.columns  #行索引  Index(['name', 'score'], dtype='object')

4. DataFrame的运算

  • 与非pandas对象的运算 【服从广播机制】

    运算方式运算含义相关代码
    与数值相加各个位置都会加上这个数值 【广播机制】在这里插入图片描述
    列相同对应列位置相加在这里插入图片描述
    行列不同不可加,DataFrame是根据索引匹配,不匹配报错在这里插入图片描述
df=pd.DataFrame(data=np.random.randint(0,100,size=(3,4)),columns=list('ABCD'))df+10arr1=np.array([1,2,3,4])df + arr1arr2=np.random.randint(0,20,size=(2,2))df + arr2
  • Series对象运算

    • DateFrameSeries运算,默认是列索引对齐原则,不匹配,补NaN

    • add函数指定轴向index为行,不匹配补NaN

      s=pd.Series(data=[1,2,3],index=[1,2,3])
      df=pd.DataFrame(data=np.random.randint(0,100,size=(3,4)),columns=list('ABCD'))
      s+df
      df.add(s,axis='index')
      

      在这里插入图片描述

  • DataFrame对象运算

    对齐方式方法
    索引对齐原则(row/columns)
    对不齐补空值使用add/sub/mul/div函数处理空值
  • python操作符与pandas操作函数的对应表

    • 根据索引匹配,不匹配补NaN,匹配进行运算
    • 填充方式:根据索引匹配,不匹配适用fill_value填充,匹配进行运算
      • 注意:DataFrameSeries运算,不支持fill_value属性
    字符函数
    +add()
    - sub(),subtract()
    *mul(),multiply()
    / truediv(),div(),divide()
    //floordiv()
    %mod()
    **pow()
    df1=pd.DataFrame(data=np.random.randint(0,10,size=(3,3)),columns=list('ABC'))
    df2=pd.DataFrame(data=np.random.randint(0,10,size=(2,2)),columns=list('BA'))
    df1+df2
    df1.add(df2,fill_value=0) 
    

    在这里插入图片描述

  • numpy functions

    arr = np.random.randint(-10, 10, size=(3,3))
    df=pd.DataFrame(data=arr)
    #求每个数的绝对值
    np.abs(df)
    

    在这里插入图片描述

  • 转置运算

    df=pd.DataFrame(data=np.random.randint(-10,10,size=(3,3)))
    #对角线翻转
    df.T
    

    在这里插入图片描述

5. pandas访问相关操作

ndarray(ndim_index,ndim_index2…)
ndim_index支持:索引,索引列表,bool列表,切片,条件表达式

  • 注意:使用索引切片都是左闭右开,使用标签切片的都是闭合区间
访问形式含义
loc[]显示访问:在pandas对象中,可以使用标签的形式访问数据
iloc[]隐式访问,在pandas对象中,也可以使用index的形式访问数据

5.1 使用 loc[]显示访问

s.loc[index]
s.loc[row_index,col_index]
index支持:索引(index),索引列表(index_list),布尔列表(bool_list),条件表达式,切片(左闭右开)

显示索引访问形式相关代码
df.loc[0,'A']取指定位置的数,第0行,第A
df.loc[0]获取指定行,默认取行索引
df.loc[:,['A','B']]AB列,但是不能跳过行索引直接取列索引,所以前面用切片取所有
df.loc[[1,2],['B','C']]前两行,AB列
df.loc[np.array([True,False,False,False,False])] 通过bool列表获取列,bool长度要与行一致
bool_list=pd.Series(data=np.array([True,True,False,False,False,True]),index=[0,4,1,2,3,5]) df.loc[bool_list] 创建Series,将行0,4,5行设为True,其他为False,取所要的行
bool_list=pd.Series(data=np.array([True,True,False,False,False,True]),index=[0,4,1,2,3,5]) df.loc[:,bool_list.values]获取所有行,将bool_listbool值赋值给列
s.loc['b':'c'] 切片访问,显示索引闭合区间,左闭右闭
s.loc[['b','c']]索引访问
s.loc[[False,True,True,False,False]]布尔值访问
s.loc[s>6] 条件语句访问
df = pd.DataFrame(data=np.random.randint(0,10,size=(5,6)), columns=list('ABCDEF'))
df.loc[0,'A']      
df.loc[0]            
df.loc[:,['A','B']] 
df.loc[[1,2],['B','C']]
df.loc[np.array([True,False,False,False,False])]
bool_list=pd.Series(data=np.array([True,True,False,False,False,True]),index=[0,4,1,2,3,5])
df.loc[bool_list]
df.loc[:,bool_list.values]  
s=pd.Series(data=np.random.randint(0,10,size=5),index=list('abcde'))
s.loc['b':'c']
s.loc[['b','c']]
s.loc[[False,True,True,False,False]]
s.loc[s>6]

5.2 iloc[] 隐式访问

s.iloc[index]
s.iloc[row_index,col_index]
index支持:索引(index),索引列表(index_list),布尔列表(bool_list),条件表达式,切片(左闭右开)

隐示索引访问形式相关代码
df.iloc[:,0]获取所有行,第一列
df.iloc[0:3]获取所有行,0,1,2【切片获取,左闭右开】
df.iloc[[True,False,True,False,False]]bool列表获取索引
df = pd.DataFrame(data=np.random.randint(0,10,size=(5,6)), columns=list('ABCDEF'))
df.iloc[:,0]
df.iloc[[True,False,True,False,False]]
df.iloc[0:3]
  • 间接访问

    df = pd.DataFrame(data=np.random.randint(0,10,size=(5,6)), columns=list('ABCDEF'))
    #间接访问,不提倡,赋值时会分不清到底修改了谁
    df.loc[0].loc['B']=10
    #标签访问列
    df[['A','B']]
    #切片访问行
    df[0:2]
    

5.3 总结

  • 注意:直接用中括号访问
  • 标签访问的是列,标签切片访问的是行

6. 单层索引和多层级索引

6.1 索引种类与使用

  • 怎么使用索引?

    • pd.Indexpandas提供的专门用于构造索引的类,它有很多类,CategoricalIndex,RangeIndex
    • 所有的子类都具备Index类的特点,比如可以使用索引访问元素
    • 通常如果需要对索引定制(name),可以使用pd.Index系列方法来构造索引
    • 如果没有特殊需求,使用普通的列表完全没有问题
  • 索引种类【不是很知道区别,实际好像没有用到过】

种类含义
RangeIndex实现单调整数范围的索引.
CategoricalIndex索引类分类
MultiIndex多级索引
IntervalIndex类间隔索引
DatetimeIndex, TimedeltaIndex, PeriodIndex,Int64Index, UInt64Index, Float64Index其他种类

6.2 索引相关设置

索引相关设置代码
重新设置index索引df.index=list('abcde')
重新设置columns索引df.columns = [1,2,3]
设置索引名称为indexpd.RangeIndex(start=0,stop=5,step=1,name='index')
其他pd对象索引赋值给另一个pd对象df.index=m_index
df=pd.DataFrame(data=np.random.randint(0,10,size=(5,3)),columns=list('ABC'))
df.index=list('abcde')
df.columns = [1,2,3]
m_index=pd.RangeIndex(start=0,stop=5,step=1,name='index')
df.index=m_index

6.3 索引构造

  • 单层索引,使用pd.index()

  • 多层索引构造

    • 使用arrays MultiIndex.from_arrays()
    columns=pd.MultiIndex.from_arrays([['第一学期','第一学期','第一学期','第二学期','第二学期','第二学期'],['lucy','tom','hello','lucy','tom','hello']])
    index=list('ABC')
    data=np.random.randint(0,100,size=(3,6))
    df=pd.DataFrame(data=data,index=index,columns=columns)
    #可以直接作为多层索引使用,不需要构造MutiIndex对象
    #pd.MutiIndex.from_arrays([必须是一个额为数组结构])
    #模范,不采用,理解即可
    
    • 使用tuple pd.MulitiIndex.from_tuples

      tuples=pd.MultiIndex.from_tuples([('第一期','lucy'),('第一期','tom'),('第一期','hello'),('第二期','lucy'),('第二期','tom'),('第二期','hello'),
      ])
      index=list('ABC')
      data=np.random.randint(0,100,size=(3,6))
      df=pd.DataFrame(data=data,index=index,columns=columns)
      
    • 使用product pd.MultiIndex.from_product

      level1=['第一期','第二期']
      level2=['A','B','C']
      #level1与level2自动匹配
      #列索引为期数与产品
      data=np.random.randint(0,100,size=(3,6))
      columns=pd.MultiIndex.from_product([level1,level2],names=['期数','产品'])
      index=pd.Index(data=['lucy','tom','hello'],name='销售员')
      df=pd.DataFrame(data=data,index=index,columns=columns)level1=['第一期','第二期']
      level2=['A','B','C']
      #行索引为期数与销售员
      index=pd.MultiIndex.from_product([['第一期','第二期'],['lucy','tom','hello']],names=['期数','销售员'])
      columns=pd.Index(data=['A','B','C'],name='产品')
      data = np.random.randint(0, 100, size=(6,3))
      df=pd.DataFrame(data=data,index=index,columns=columns)
      

6.4 索引访问

  • 多层索引访问逻辑
    • 多层索引的访问逻辑,与单层索引的访问逻辑完全一致
    • 但是:多层索引的索引表达形式是以元组的方式处理的
  • 多层索引创建
    level1,level2=['第一期','第二期'],['lucy','tom','hello']
    #行索引为期数与销售员
    index=pd.MultiIndex.from_product([level1,level2],names=['期数','销售员'])
    columns=pd.Index(data=['A','B','C'],name='产品')
    data = np.random.randint(0, 100, size=(6,3))
    df=pd.DataFrame(data=data,index=index,columns=columns)
    
    在这里插入图片描述
  • 多层索引访问【元祖形式访问】
    #显示索引
    df.loc[('第一期','hello')]
    df.loc[[('第一期','lucy'),('第二期','lucy')]]
    df.loc['第一期'].loc['tom']
    df.sort_index(inplace=True)
    #使用babels
    df.loc[('第一期','lucy'):('第二期','lucy')]
    

在这里插入图片描述

6.5 索引变换

  • unstack把行索引向列索引变换

      level1,level2=['第一期','第二期'],['lucy','tom','hello']#行索引为期数与销售员index=pd.MultiIndex.from_product([level1,level2],names=['期数','销售员'])columns=pd.Index(data=['A','B','C'],name='产品')data = np.random.randint(0, 100, size=(6,3))df=pd.DataFrame(data=data,index=index,columns=columns)display(df,df.unstack())  
    

在这里插入图片描述

  • stcak把列索引向行索引变换

    df.stack()
    

    在这里插入图片描述

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

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

相关文章

【排序算法 上】带你手撕常见排序 (插入,希尔,选择,堆排序) (动图详解)

欢迎来到 Claffic 的博客 💞💞💞 “东风随春归,发我枝上花。” 前言: 排序是日常生活中极其常见的一种算法,它的功能很简单,就是将数字按照升序/降序排列,最终形成一组有序的数字&a…

NumPy 秘籍中文第二版:五、音频和图像处理

原文:NumPy Cookbook - Second Edition 协议:CC BY-NC-SA 4.0 译者:飞龙 在本章中,我们将介绍 NumPy 和 SciPy 的基本图像和音频(WAV 文件)处理。 在以下秘籍中,我们将使用 NumPy 对声音和图像进…

Redis锁的租约问题

目录Redis的租约问题Redis租约问题的想法Redis租约问题的解决方案Redis的租约问题 首先我们先来说一说什么是Redis的租约问题。   在我们实现Redis分布式锁的时候&#xff0c;我们会出现Redis锁的时间<业务执行执行时间&#xff0c;这其实就是一个典型的租约问题&#xf…

ChatGPT背后的AI背景、技术门道和商业应用(万字长文,建议收藏)

作者&#xff1a;京东科技 李俊兵 各位看官好&#xff0c;我是球神&#xff08;江湖代号&#xff09;。 自去年11月30日ChatGPT问世以来&#xff0c;迅速爆火出圈。 起初我依然以为这是和当年Transformer, Bert一样的“热点”模型&#xff0c;但是当一篇篇文章/报告不断推送…

LAMP架构的配置

一.LAMP概述 1、LAMP的概念 LAMP架构是目前成熟的企业网站应用模式之一&#xff0c;指的是协同工作的一整套系统和相关软件&#xff0c;能够提供动态web站点服务及其应用开发环境 LAMP是一个缩写词&#xff0c;具体包括Linux操作系统、Apache网站服务器、MySQL数据库服务器、…

【Unity入门】11.脚本控制物体旋转

【Unity入门】脚本控制物体旋转 大家好&#xff0c;我是Lampard~~ 欢迎来到Unity入门系列博客&#xff0c;所学知识来自B站阿发老师~感谢 &#xff08;一&#xff09;控制物体自转 &#xff08;1&#xff09;创建RotateLogic脚本 上一篇文章我们学习了如何在脚本中获取物体对象…

Oracle VM VirtualBox安装开放麒麟桌面版本操作

1.环境 Oracle VM VirtualBox版本6.1.18 开放麒麟桌面版本openkylin 0.0.5 https://mirror.lzu.edu.cn/openkylin-cdimage/yangtze/openkylin-0.9.5-x86_64.iso 1.创建新虚拟电脑 ql 并将ios导入 然后点击启动 注意&#xff1a; vm box如果鼠标设置不当的话 基本上不可能完成…

word脚标【格式:第X页(共X页)】

不得不吐槽一下这个论文&#xff0c;真的我好头疼啊。我又菜又不想改。但是还是得爬起来改 &#xff08;是谁大半夜不能睡觉加班加点改格式啊&#xff09; 如何插入页码。 格式、要求如下: 操作步骤&#xff1a; ①双击页脚&#xff0c;填好格式&#xff0c;宋体小四和居中都…

联想集团ESG与社会价值论坛召开,首次发布《联想集团2022社会价值报告》

对企业而言&#xff0c;ESG不再是选择题&#xff0c;而是必答题。 联想集团是ESG的先行者、领军者。 2023年4月11日&#xff0c;“联想集团ESG与社会价值论坛暨《联想集团2022社会价值报告》发布会”在京召开&#xff0c;会议由中国社会责任百人论坛、联想集团联合主办&#xf…

LeetCode:1. 两数之和——哈希表~

&#x1f34e;道阻且长&#xff0c;行则将至。&#x1f353; &#x1f33b;算法&#xff0c;不如说它是一种思考方式&#x1f340;算法专栏&#xff1a; &#x1f449;&#x1f3fb;123 一、&#x1f331;1. 两数之和 题目描述&#xff1a;给定一个整数数组nums 和一个整数目标…

电脑组装教程分享!

案例&#xff1a;如何自己组装电脑&#xff1f; 【看到身边的小伙伴组装一台自己的电脑&#xff0c;我也想试试。但是我对电脑并不是很熟悉&#xff0c;不太了解具体的电脑组装步骤&#xff0c;求一份详细的教程&#xff01;】 电脑已经成为我们日常生活中不可或缺的一部分&a…

Windows使用Dockers+battery historian踩坑记

1、首先&#xff0c;需要翻墙。 2、然后安装Dockers&#xff0c;网上好多博客说安装Docker Toolbox&#xff0c;我亲测无效&#xff0c;卸载后安装Docker for Windows&#xff0c;安装完成后打开&#xff0c;会提示&#xff1a; Hardware assisted virtualization and data e…

Anaconda + TensorFlow Winodws环境安装(Windows Terminal / Visual Studio)

目录前言个人环境Anaconda安装下载安装测试添加到windows terminalTensorFlow环境配置安装测试搭配Visual Studio 2022前言 以前发生的一些事情&#xff0c;让我认识到即便配环境这种事情&#xff0c;最好还是把自己的过程存个档 &#xff0c;这个的安装虽然简单&#xff0c;但…

pytorch通过不同的维度提高cifar10准确率

这里写自定义目录标题通过模型通过优化器通过batchsize通过数据增强总结当前网络的博客上都是普遍采用某个迁移学习训练cifar10&#xff0c;无论是vgg&#xff0c;resnet还是其他变种模型&#xff0c;最后通过实例代码&#xff0c;将cifar的acc达到95以上&#xff0c;本篇博客将…

资本/车企持续加码的新赛道,谁将成为本土赢家?

随着汽车行业逐渐复苏&#xff0c;汽车厂商开始规划未来5年能促进销量的新技术&#xff0c;而AR-HUD就是被看好的技术之一。 Envisics创始人兼CEO Jamieson Christmas博士表示&#xff1a;我们几乎在与所有人合作&#xff0c;除了捷豹路虎、松下汽车系统外还有其他合作伙伴。此…

Vue3中readonly 与 shallowReadonly的使用区别?

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录前言readonly强行修改readonly&#xff1a;前言 readonly: 让一个响应式数据变为只读的&#xff08;深只读&#xff09;。 shallowReadonly&#xff1a; 让一个响应…

Docker Registry 本地镜像发布到私有库

本地镜像发布到私有库流程 是什么1 官方Docker Hub地址&#xff1a;https://hub.docker.com/&#xff0c;中国大陆访问太慢了且准备被阿里云取代的趋势&#xff0c;不太主流。2 Dockerhub、阿里云这样的公共镜像仓库可能不太方便&#xff0c;涉及机密的公司不可能提供镜像给公…

Java实现打印杨辉三角形,向左、右偏的平行四边形这三个图形代码程序

目录 前言 一、打印杨辉三角形 1.1运行流程&#xff08;思想&#xff09; 1.2代码段 1.3运行截图 二、向左偏的平行四边形 1.1运行流程&#xff08;思想&#xff09; 1.2代码段 1.3运行截图 三、向右偏的平行四边形 1.1运行流程&#xff08;思想&#xff09; 1.2代…

WebServer项目->计网知识补充

c大项目[WebServer项目]->计网知识补充1.网络结构模式C/S结构B/S结构2.MAC 地址3.IP 地址1)IP 地址编址方式2)A类IP地址3)B类IP地址4)C类IP地址5)D类IP地址(了解)6)特殊的网址7)子网掩码4.端口5.网络模型1)OSI 七层参考模型&#xff08;Open System Interconnection&#xf…

HTML5 <img> 标签

HTML5 <img> 标签 实例 HTML5 <img>标签用于向网页中添加相关图片。 如何插入图像&#xff1a; <img src"smiley-2.gif" alt"Smiley face" width"42" height"42">尝试一下 &#xff08;更多实例见页面底部&…