pandas是什么以及pandas的三种数据结构Series、DataFrame、MultiIndex的创建方式函数代码

news2025/7/13 22:54:38

一、pandas概述

pandas是2008年WesMcKinney开发出的专门用于数据挖掘的开源python库,以Numpy为基础,借助numpy模块在计算方面性能高的优势,基于matplotlib,能够简便的画图,具有独特的数据结构

pandas特点

  • 图表的可读性强
  • 数据处理能力便捷
  • 读取文件方便
  • 封装了Matplotlib、Numpy的画图和计算

二、pandas数据结构

pandas中共有三种数据结构,分别为

  • Series:是一维数据结构
  • DataFrame:是二维的表格型数据结构
  • MultiIndex:是三维的数据结构

2.1 Series

Series是一个类似于一维数组的数据结构,能够保存任何类型的数据,如整数、字符串、浮点数等,主要由一组数据和与之相关的索引两部分构成

1.series创建

  • series创建:pd.Series(data=None, index=None,dtype=None):创建带索引的一维数组
    • data:传入的数据,可以是ndarray、list等
    • index:索引,必须是唯一的,且与数据的长度相等。如果没有传入索引参数,则默认会自动创建一个从0-N的整数索引
    • dtype:数据的类型
  • 创建
  1. 指定数据内容,默认索引
  2. 给定数据内容,指定索引
  3. 通过字典数据创建
import pandas as pd
import numpy as np
pd.Series(np.arange(0, 50, 10))  # 创建[0,50)步长为10的等差数组数据,索引默认

pd.Series([1, 2, 3, 4.3, 5.2], index=[1,2,3,4,5])   # 指定数据和索引

name = pd.Series({'name1':'XX', 'name2':'XY', 'name3':'YY', 'name4':'YX'})   # 通过字典数据创建
name

2.series属性 

  •  Series属性:为了方便操作Series对象中的索引和数据,Series中提供了两个属性
    • index
    • values
name = pd.Series({'name1':'XX', 'name2':'XY', 'name3':'YY', 'name4':'YX'})   # 通过字典数据创建
name.index    # 获取索引

name.values    # 获取数据值

data = pd.Series([1, 2, 3, 4.3, 5.2], index=[1,2,3,4,5])   # 指定数据和索引
data.index

data.values

2.2 DataFrame

DataFrame是一个类似于二维数组或表格(如excel)的对象,既有行索引,又有列索引

1. DataFrame创建 

  • 行索引:表明不同行,横向索引,叫index,0轴,axis=0
  • 列索引:表名不同列,纵向索引,叫columns,1轴,axis=1
  • DataFrame创建:pd.DataFrame(data=None, index=None, columns=None)
    • data:传入的数据
    • index:行标签。如果没有传入索引参数,则默认会自动创建一个从0-N的整数索引。
    • columns:列标签。如果没有传入索引参数,则默认会自动创建一个从0-N的整数索引
pd.DataFrame(np.random.randn(3, 5))  # 3行5列

num = np.random.randint(50, 100, (3, 5))
num

# 传入标签索引
column = ['第一列', '第二列', '第三列', '第四列', '第五列']   # 列标签索引
# ind = ['第一行', '第二行', '第三行']    # 行标签索引
ind = ['第' + str(i) + '行' for i in range(num.shape[0])]   # 行标签索引,num.shape[0]即获取num数组的行号,此处为3
data = pd.DataFrame(num, columns=column, index=ind)
data

 2. DataFrame属性方法

  • shape:获取数组形状,几行几列
  • index:获取行索引列表
  • columns:获取列索引列表
  • values:获取数组中的值
  • T:数组转置
  • head(n):显示前n行数据,若不补充参数,则默认5行
  • tail(n):显示后n行数据,若不补充参数,则默认5行
data
data.shape
data.index
data.columns
data.values
data.T
data.head(2)
data.tail(1)

3. DatatFrame索引的设置

①修改行列索引,必须全部修改,不能修改单个索引

# 修改索引,必须全部修改
ind = ['第_' + str(i) + '_行' for i in range(num.shape[0])]   # 行标签索引,num.shape[0]即获取num数组的行号,此处为3
data.index = ind
data

data.index[1] = '第二行'
data  # 报错:索引不支持可变操作,即不能单个修改

②重设索引

  • reset_index(drop=False):设置新的下标索引
    • drop:默认为False,不删除原来索引,若为True,删除原来的索引值
data.reset_index()   # 重置索引,默认drop=False,不删除原来索引

data.reset_index(drop=True)    # 重置索引,drop=True,删除原来索引

③以某列值设置为新的索引

  • set_index(keys, drop=True)
    • keys : 列索引名成或者列索引名称的列表
    • drop : 布尔类型,默认为True,当做新的索引,删除原来的列
time = pd.DataFrame({'day': [365, 365*2, 365*3], 'month':[12*(i + 1) for i in range(3)], 'year': [1, 2, 3]})
time

time.set_index('year', drop=False)    # 设置year为索引,drop=False表示不删除原来year那一列

time.set_index(['year', 'month'])  # 设置多个索引

2.3 MultiIndex

MultiIndex是三维的数据结构,多级索引(层次化索引),是pandas的重要功能,可以在Series、DataFrame对象上拥有2个以及2个以上的索引

1. multiIndex特性 

查看索引如下,多级或分层索引对象

  • index属性
    • names:levels的名称
    • levels:每个level的元组值
time0 = time.set_index('year', drop=False)    # 设置year为索引,drop=False表示不删除原来year那一列
time0.index   # 获取year索引

time = time.set_index(['year', 'month'])  # 设置多个索引
time.index   # 获取year和month索引

time.index.names   # index的names属性

time.index.levels   # index的levels属性

2. multiIndex和panel创建

①MultiIndex创建

  • pd.MultiIndex.from_arrays(arrays, sortorder=None, names=None):用于将数组arrays转为多索引multiIndex,多维数组作为参数,高维指定高层索引,低维指定低层索引
    • arrays:列表或序列类型,每个array-like都会为每个数据点提供一个级别的值, len(arrays)是级别数
    • sortorder:整数或无,排序级别(必须按该级别按字典顺序排序)
    • names:str的列表/序列,可选,用来指定索引中级别的名称
    • 返回:多索引MultiIndex

 对比前面设置的多个索引如下

data = [['XY', 'YX', 'XX', 'YY'], [20, 18, 22, 19]]    # 两层索引
pd.MultiIndex.from_arrays(data, names=('姓名', '年龄'))   # names指定索引名

其他补充

  • pd.MultiIndex.from_tuples():元组的列表作为参数,每个元组指定每个索引(高维和低维索引)
  • pd.MultiIndex.from_product():一个可迭代对象的列表作为参数,根据多个可迭代对象元素的笛卡尔积(元素间的两两组合)进行创建索引
  • pd.MultiIndex.from_frame:根据现有的数据框来直接生成
  • groupby():通过数据分组统计得到
  • pivot_table():生成透视表的方式来得到

 ②panel创建(已弃用)

  • pd.Panel(data=Noneitems=Nonemajor_axis=Noneminor_axis=None):用来存储3维数组的Panel结构
    • data : ndarray或者dataframe
    • minor_axis : 索引或类似数组的对象,axis=2
    • major_axis : 索引或类似数组的对象,axis=1
    • items : 索引或类似数组的对象,axis=0

学习导航:http://xqnav.top/ 

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

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

相关文章

深度强化学习中深度Q网络(Q-Learning+CNN)的讲解以及在Atari游戏中的实战(超详细 附源码)

需要源码请点赞收藏关注后评论区留下QQ~~~ 深度强化学习将深度学习的感知(预测能力)与强化学习的决策能力相结合,利用深度神经网络具有有效识别高维数据的能力,使得强化学习算法在处理高纬度状态空间任务中更加有效 一、DQN算法简…

牛客小白月赛62 幼稚园的树

2022.11.25 今晚闲来无事,在zhoj群中看到管理员发布的牛客小白月赛的通知,就和舍友一起参加了。 题目描述 来源:牛客网 牛牛在幼稚园做义工,幼稚园中共有 nnn 颗树,第 1 天中午时它们的高度分别为:h1,h2…

体系结构27_多处理机(1)

单处理机的发展正在走向尽头? 并行处理机在未来将会发挥更大的作用。 1.获得超过单处理器的性能,最直接的方法就是把多个处理器连在一起。 2.自1985年以来,体系结构的改进使性能迅速提高,这种改进的速度能否持续下去还不清楚&a…

Day11--首页-轮播图效果

1.创建 home 分支 我的操作: ************************************************** ************************************************** ******* 2.配置网络请求 博主文档: 我的操作: 1》.先初始化一个package.json文件。 2》根据博主的…

MyBatis-Plus 01入门

参考网站 官网:http://mp.baomidou.com 参考教程:http://mp.baomidou.com/guide/ 一、简介 MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率…

测试用例设计方法之等效类,边界值

概念: 等价类划分是一种黑盒测试方法,把无限的测试变成有限的测试。把所有可能的输入数据,即程序的输入域划分成若干等价类,然后从每一个等价类中选取少数具有代表性的数据作为测试用例。依据需求将输入(特殊情况下会考虑输出)划分…

MySQL之InnoDB浅析

InnoDB是一个兼顾高可靠性和高性能的通用存储引擎。在 MySQL 5.7 中,InnoDB是默认的 MySQL 存储引擎。 InnoDB 的主要优势 支持事物,具备crash-safe的能力支持行锁以及MVCC,具备良好的多用户并发性和性能Buffer Pool,提升热点数…

Redis过期键及内存淘汰策略

写在前面 以下内容是基于Redis 6.2.6 版本整理总结 一、Redis数据库的组织方式 Redis服务器将所有的数据库 都保存在src/server.h/redisServer结构中的db数组中。db数组的每个entry都是src/server.h/redisDb结构,每个redisDb结构代表一个数据库。Redis默认有16个…

测试用例设计方法之正交法

概念: 正交试验设计是研究多因素多水平的一种设计方法,它是根据正交性,由试验因素的全部水平组合中挑选出部分有代表性的点进行试验,通过对这部分试验结果的分析了解全面试验的情况,找出最优的水平组合。正交试验设计…

49 - 多态的概念和意义

---- 整理自狄泰软件唐佐林老师课程 1. 函数重写回顾 父类中被重写的函数依然会继承给子类子类中重写的函数将覆盖父类中的函数通过作用域分辨符(::)可以访问父类中的函数 p->print()不符合预期,期望调用子类中的print,实际调…

【知识网络分析】研究者合作网络(co-investigator)

研究者合作网络(co-investigator) 1 数据集读取2 网络数据集精简3 网络最大子群获取并可视化4 社团群体分类筛选5 求解网络图中节点中心度相关的指标值并进行可视化1 数据集读取 此处的合作作者(co-investigator)是指基金数据中的作者,数据集 来自于官网提供的加拿大国家…

redis数据库windows下c语言库的编译

使用cmake和make工具进行windows下的编译 下载 1.hiredis下载地址 https://github.com/redis/hiredis 克隆源码 2.cmake下载地址 https://cmake.org/ 3.make for windows http://www.equation.com/servlet/equation.cmd?fa=make 4.mingw 64位 https://download.csdn.net/d…

USB Network Native Driver for ESXi更新支持ESXi8.0

在ESXi8.0发布一个多月后,社区版的USB网卡驱动终于在flings上更新了,USB Network Native Driver for ESXi | VMware Flings Nov 23, 2022 - v1.11 Added support for ESXi 8.0 ESXi800-VMKUSB-NIC-FLING-61054763-component-20826251.zip md…

如何根据不同需求给Word文档设置保护?

Word文档可以设置不同的保护模式,我们可以根据不同需求选择合适的方法,下面介绍一下常用的3种方法。 方法一: 如果不想Word文档被随意打开,我们可以设置打开密码,只有输入正确的密码才能打开文件。 首先&#xff0c…

Metabase学习教程:视图-4

将数据可视化为直方图 学习何时使用直方图,以及元数据库如何使创建直方图更容易。 我们将逐步创建直方图,它是一种条形图,显示连续范围内的数据组。柱状图有助于深入了解人们可能购买的商品的数量、他们可能购买的价格范围,甚至…

JS 数据结构:集合

集合 集合是由一组无序且唯一(即不能重复)的项组成的。该数据结构使用了与有限集合相同的数学概念。ES6 JS 原生实现了集合 Set 数据结构(具体看这篇文章JS Set 与 weakSet),但是没有取两集合交集、并集、差集的 API …

机器学习笔记之高斯网络(二)高斯贝叶斯网络

机器学习笔记之高斯网络——高斯贝叶斯网络引言回顾高斯网络贝叶斯网络:因子分解高斯贝叶斯网络:因子分解引言 上一节介绍了高斯网络及其条件独立性,本节将介绍高斯贝叶斯网络。 回顾 高斯网络 高斯网络最核心的特点是:随机变…

SpringBoot 多点互斥登录(web应用安全) 保姆级教程

1.什么是互斥登录 在实际生活中,很多网站都做了多点登录互斥的操作,简单来说就是同一个账号,只能在一台电脑上登录,如果有人在其他地方登录,那么原来登录的地方就会自动下线,再进行操作就会弹出登录界面。 …

【远程调用 MySQL数据库并操作】——使用NATAPP搭建内网穿透远程访问MySQL数据库并使用 Python新建、写入、读取、删除数据【详细版】

所有的程序都是免费的!! Python MySQL NATAPP 点个赞留个关注吧!! NATAPP 安装使用教程 官网 NATAPP 下载 官网 NATAPP配置教程 1、进入NATAPP 登录/注册 进行登录,没有的注册一下,需要实名认证哦&am…

python基础之字符串

文章目录一、字符串定义二、字符串相关使用三、空白字符表示哪些?四、实例1.要求:顺序并且居中对齐输出以下内容2.要求:1.将字符串中的空白字符全部删去;2.再使用“ ”作为分隔符,拼接成一个整齐的字符串五、字符串的切…