Pandas教程(一)—— 数据结构

前言

         Pandas是贯穿数据分析的主要工具之一,它经常和其他数值计算工具一起使用(例如:Numpy、SciPy和matplotlib)。尽管pandas采用了很多NumPy的代码风格,但二者最大的区别是:pandas主要用于处理表格型或异质型数据;而NumPy更适合处理同质性数据

         Pandas 主要引入了两种新的数据结构:DataFrame 和 Series。 

  • pandas和numpy的区别 

         pandas给出了索引,通过索引对数据进行操作,对索引的操作 就是对 数据本身的操作 

1.Series

 1.1 Series简介       

       Series 是 Pandas 中的一种基本数据结构,类似于一维数组或列表,可以保存任何数据类型。

  • 特点:

            1)它的每一个值都具有一个标签(可以是整数、字符串、日期等类型),用于索引;若未指定显示索引,会自动创建一个默认的整数索引

            2)Series 可以容纳不同数据类型的元素,包括整数、浮点数、字符串等

 1.2 Series的创建

  •     法一:直接创建

                       pandas.Series( data, index, dtype, name) 

参数说明:              

                        data:一组数据(ndarray 类型)                 

                         index:数据索引标签

                         dtype:数据类型                                     

                         name:设置名称 

                   也可以直接通过两个列表来创建series  数据 = pd.Series(列表2,index=列表1)

data = pd.Series(["勒布朗","Lakers",23,"2020-10-12"],index=["姓名","球队","号码","夺冠时间"],name="个人信息")

  •      法二:通过字典创建Series

                       先使用 key/value 对象创建一个字典,然后利用  pd.Series(字典) 转化为Series

import pandas as pd
dir = {1: "JJ", 2: "GEM", 3: "Jay"}  #创建字典
myvar = pd.Series(dir) #字典中的key就相当于index
print(myvar)

 1.3 Series的索引

         与numpy的索引功能非常类似,但series不但可以索引编号,也可以索引名称 ;而且series的基于标签索引切片是包含尾部的(基于整数索引不含尾部)

         我们可以直接利用标签来进行索引,但注意,若要同时索引多个目标,需要在索引列表中再输入一个列表

import pandas as pd
dir = {"man": "JJ", "woman": "GEM", "boy": "Jay"}
myvar = pd.Series(dir)
a = myvar["man"] #索引单个目标
b = myvar[["man","woman"]]  #索引多个目标
c = myvar[0:2] #也可利用编号切片(注意:series名称索引切片是包含尾部的)

                           

 1.4 属性、方法和基本运算 

方法说明
S.index获取所有索引信息
S.values获取所有值 数组

S.idxmax()

S.idxmin()

最大、最小值的索引

S.isnull()

S.notnull()

查看数据是否(不)缺失     (返回布尔)

Series 也可以直接进行运算,例如:

# 算术运算
result = series * 2  # 所有元素乘以2# 过滤
filtered_series = series[series > 2]  # 选择大于2的元素# 数学函数
import numpy as np
result = np.sqrt(series)  # 对每个元素取平方根

2.Dataframe

 2.1 Dataframe简介

        DataFrame 是一个表格型的数据结构。 它含有一组有序的列,每列可以是不同的值类型。可以被看做由多个 Series 组成的字典(共同用一个索引)。

  • 特点 

             1)既有行索引也有列索引,即行和列都有自己的名称 

             2)不同的列可以包含不同的数据类型,例如整数、浮点数、字符串等 

截图自菜鸟教程

 2.2 Dataframe的创建

     一般来说是利用 包含等长度列表或numpy数组 的 字典来形容dataframe,缺少的元素会自动以NaN补齐

            语法:   pandas.DataFrame( data, index, columns, dtype, copy)

参数说明:

                 data:一组数据(ndarray、series, list, dict 等类型)

                 index:索引值,或者可以称为行标签

                 columns列标签,默认为 RangeIndex (0, 1, 2, …, n) 

                 dtype:数据类型

# 利用含有列表的字典创建
import pandas as pd
data1 = {"城市":["北京","上海","深圳","广州"],"同比":[120.7,127.3,119.4,140.9],"环比":[101.5,101.2,101.3,120.0],"定基":[121.4,127.8,120.0,145.5]}d = pd.DataFrame(data1,index=[1,2,3,4],columns=["城市","同比","环比","定基"])
print(d)# 利用含有数组的字典构建
data2 = {"team":pd.Series(["lakers","suns","kings"],index=["a","b","c"]),"player":pd.Series(["lbj","kd","fox","sga"],index=["a","b","c","d"])}
e = pd.DataFrame(data2)
print(e)
上述代码创建的dataframe

 2.3 Dataframe的索引 

  • 索引列 : df [ 列索引名 ]       若要索引多列则需要输入多重  [[ ]]
  • 索引行 : df.loc [ 行索引名 ]      索引多行同上
  • 索引单个数据:df [ 列索引名 ][ 行索引名 ] 
  • 我们也可以利用条件语句 df [ 条件 ]   过滤行 和 列 
import pandas as pd
data1 = {"城市":["北京","上海","深圳","广州"],"同比":[120.7,127.3,119.4,140.9],"环比":[101.5,101.2,101.3,120.0],"定基":[121.4,127.8,120.0,145.5]}d = pd.DataFrame(data1,index=[1,2,3,4])print(d["城市"]) #获取单列
print(d[["城市","定基"]])  #获取多列print(d.loc[2]) #获取单行       ([]内输入索引名称)
print(d.loc[[2,3]]) #获取多列   ([]内输入索引名称)print(d["城市"][2])  #获取单个数据print(d[d["定基"] > 120]) #过滤数据
  • 行索引:loc 和 iloc

      我们已知, 基于标签索引和基于整数编号索引,在是否保留尾部上不一致,容易产生歧义;故设计了两种运算符来对应他们,即:loc(保留尾部) 和 iloc(不保留尾部)

 2.4  属性、方法和基本运算

方法说明
df.columns获取列索引
df.shape

获取形状(行 列数)

df.index获取行索引

df [ xxx ] = [ xxx, xxx, xxx ]

添加新列

 2.5 对索引的操作

         在Dataframe中通过 df.index 或 df.columns 可以获得0轴和1轴上的索引,返回的索引类型都是Index类型(类似一个固定大小的集合,但可含重复标签),而Index对象是一个不可修改的对象(无法通过 index [ 1 ] = xxx  修改)

          前面提到过pandas中,对索引的操作 == 对数据的操作,因此我们有以下常用的索引操作

方法说明
. delete(loc)删除loc处位置的元素
. insert ( loc,e )  在loc位置新增一个元素
. append ( index )

将另一个index对象放在原来的index对象后面,产生新的index对象

import pandas as pd
data1 = {"城市":["北京","上海","深圳","广州"],"同比":[120.7,127.3,119.4,140.9],"环比":[101.5,101.2,101.3,120.0],"定基":[121.4,127.8,120.0,145.5]}
d = pd.DataFrame(data1,index=["c1","c2","c3","c4"])n1 = d.columns.delete(2) #删除第三列
n2 = d.index.insert(4,"c5") #新增一行
newd = d.reindex(index=n2,columns=n1) #重组
newd.loc["c5"]= ["成都",105,110]
print(newd)

3.基本操作

 3.1 重建索引

  • 作用:重排series或dataframe的索引
  • 语法 : df.reindex(index = , columns= ,method = ,fill _value=)

     index:新的行自定义索引

     columns:新的列自定义索引

     method:填充方法,ffill为向前填充 ; bfill为向后填充

     fill _value:填充缺失位置的值

import pandas as pd
data1 = {"城市":["北京","上海","深圳","广州"],"同比":[120.7,127.3,119.4,140.9],"环比":[101.5,101.2,101.3,120.0],"定基":[121.4,127.8,120.0,145.5]}
d = pd.DataFrame(data1,index=["c1","c2","c3","c4"])newd = d.reindex(index=["c4","c3","c2","c1","c0"],columns=["定基","环比","同比","城市"],fill_value=0) #重组print(newd)

 3.2 在轴上删除条目(索引)

  • 作用:删除指定的行 / 列条目(直接修改原数组)
  • 语法: df.drop(“xxx” , axis = 0 / 1)

     axis:指定删除的轴 默认为0轴 即删除行

 3.3 算数和数据对齐

在pandas中,在两个不同的索引化对象之间进行算数操作时,会返回两者的并集,在没有交叠的位置上,返回的值为NaN,我们可以通过设置fill_value参数来填充缺失值

import pandas as pd
a = pd.DataFrame(np.arange(9).reshape(3,3),columns=["a","b","c"],index=["A","B","C"])
b = pd.DataFrame(np.arange(9).reshape(3,3),columns=["a","b","d"],index=["A","B","D"])print(a.mul(b,fill_value=0))# 乘法是对应位置元素相乘

 3.4 在每行分别应用函数

  • 语法: df.apply( f , axis= ) 

     f : 自己定义的要应用到每一行(列)函数

     axis:要应用的轴

import pandas as pd
a = pd.DataFrame(np.arange(9).reshape(3,3),columns=["a","b","c"],index=["A","B","C"])def f(x):return x.max()- x.min()  #计算每行最大值和最小值的差print(a.apply(f))

 3.5 排序

方法说明
df.sort_index([ index = ,columns = , axis = ,ascending = ])

按 行/列 进行字典型排序

ascending:排序方式(默认True 升序) 

 df.sort_values([ by= ])

根据series的值进行排序 

by:根据一列或多列(传入列表)作为排序键

df.rank([ ascending= , method =  ])

排名

method:排名方法 默认分配平均排名



 3.6 数学统计描述方法

      作用:返回一些描述统计信息(例如 个数 均值 唯一值个数 ...)

      语法:df.describe()

数学统计函数表

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

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

相关文章

GBASE南大通用-GBase 8s数据库日志模式及切换

一、 GBase 8s数据库共有以下 4 种日志模式:无日志模式、缓冲日志模式、无缓冲日志模式、ANSI 模式。详细介绍如下: 1、无日志模式(Non logging): 采用无日志模式时,所有 DML 操作都不会被记录到日志中&…

IP地理位置定位技术基本原理

IP地理位置定位技术的基本原理是基于IP地址的特性。每个IP地址在网络中都有一个与之对应的地理位置信息,这是通过IP地址数据库来确定的。这个数据库由ISP(Internet Service Provider)或其它一些机构维护,其中包含了每个IP地址的地…

链表精选题集

目录 1 链表翻转 题目链接: 解题: 试错版: 2 找中间节点 题目链接: 题解: 3 找倒数第k个节点 题目链接: 题解: 4 将两个升序链表合并为一个升序链表 题目链接: 题解: …

tmux 包的介绍及使用

tmux 本博文参照 https://blog.csdn.net/qq_43912191/article/details/123214679 对 tmux 进行总结和归纳。 tmux(Terminal Multiplexer)是一款命令行下的终端复用软件,用于在一个终端窗口中运行多个终端会话,并且可以在各会话之…

第六课:冷战和消费主义、个人计算机革命、图形用户界面(GUI)及3D图形

第六课:冷战和消费主义、个人计算机革命、图形用户界面(GUI)及3D图形 第二十四章:冷战和消费主义本课概括:政府和消费者推动了计算机的发展 第二十五章:个人计算机革命本集概括:继续讲计算机发展…

AJAX: 整理2:学习原生的AJAX,这边借助express框架

1. npm install express 终端直接安装 2. 测试案例:Hello World! 新建一个express.js的文件,写入下方的内容 // 1. 引入express const express require(express)// 2. 创建服务器 const app express()// 3.创建路由规则 // request 是对请…

mxxWechatBot微信机器人V2版本文档说明

大家伙,我是雄雄,欢迎关注微信公众号:雄雄的小课堂。 先看这里 一、前言二、mxxWechatBot流程图三、怎么使用? 一、前言 经过不断地探索与研究,mxxWechatBot正式上线,届时全面开放使用。 mxxWechatBot&am…

【动态规划精选题目】3、简单多状态模型

此动态规划系列主要讲解大约10个系列【后续持续更新】 本篇讲解简单多状态模型中的9道经典题,会在讲解题目同时给出AC代码 目录 1、按摩师 2、力扣198:打家劫舍1 3、打家劫舍II 4、删除并获得点数 5、 粉刷房子 6、力扣309:买卖股票的最佳时机含冷冻期 7、 买…

【数据库系统概论】第7章-数据库设计

文章目录 7.1 数据库设计概述7.2 需求分析7.2.1 需求分析的任务7.2.2 需求分析的难点7.2.2 需求分析的方法7.2.3 数据字典 7.3 概念结构设计7.3.1 概念模型7.3.2 E-R模型7.3.3 概念结构设计 7.4 逻辑结构设计7.4.1 E-R图向关系模型的转换7.4.2 数据模型的优化7.4.3 设计用户子模…

【教程】标注工具Labelimg的安装与使用

图片标注主要是为了建立自己的数据集,便于进行更深度的学习训练。本篇文章将对一款十分好用的图片标注工具labelimg进行介绍,重点介绍其安装以及使用的过程。 - 什么是labelimg labelimg 是一个可视化的图像标定工具。它是用Python编写的,并…

HDFS客户端UnknownHostException事故解析

文章目录 前言事故现场问题分析是否是整个域名解析服务当时都出问题了是否是出问题的pods本身的域名解析有问题 异常发生的全部过程域名的解析是什么时候发生的,怎么发生的域名解析的详细流程 重试发生在什么地方为什么重试会无效 Bugfix代码详解关于StandardHostRe…

特殊权限(suid sticky acl mask)

1.suid 1. 普通用户可不可以修改密码? 答:是可以的,可以修改自己的密码 2. /etc/shadow 文件的作用是什么? 答:存储用户密码的文件 3. 普通用户是否可以修改/etc/shadow 文件? 答:不可以&…

STM32+Codesys工业软件PLC解决方案

工业控制系统在现代制造和自动化领域扮演着关键角色, 基于IEC 61131-3 标准的控制器编程开发软件平台CODESYS,适用于多种行业的控制系统的开发,使用户方便快捷地对自动化工程进行编程和配置,完成项目开发、软件测试和应用调试。 本次STM32联合合作伙伴C…

服务器运行状况监控工具

服务器运行状况监视提供了每个服务器状态和性能的广泛概述,通过监控服务器指标,如 CPU 使用率、内存消耗、I/O、磁盘使用率、进程等,服务器运行状况监控可以避免服务器停机。 服务器性能监控指标 服务器是网络中最重要的组件之一&#xff0…

计算机网络复习6

应用层 文章目录 应用层网络应用模型域名系统DNS文件传输协议FTP电子邮件万维网 网络应用模型 客户/服务器模型 客户/服务器(Client/Server,C/S)模型中,有一个总是打开的主机称为服务器,它服务于许多来自其他称为客户机的主机请求…

Java集合/泛型篇----第一篇

系列文章目录 文章目录 系列文章目录前言一、ArrayList和linkedList的区别二、HashMap和HashTable的区别三、Collection包结构,与Collections的区别四、泛型常用特点前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站…

Spring系列学习四、Spring数据访问

Spring数据访问 一、Spring中的JDBC模板介绍1、新建SpringBoot应用2、引入依赖:3、配置数据库连接,注入dbcTemplate对象,执行查询:4,测试验证: 二、整合MyBatis Plus1,在你的项目中添加MyBatis …

从零开始:使用 BIND 构建和管理您的 DNS 服务器

1 前言 在这篇文章中,我将详细介绍如何使用 BIND(Berkeley Internet Name Domain)软件包中的 named 程序来配置和管理一个基本的 DNS 服务器。 从安装 BIND 开始,到设置 DNS 区域文件,再到运行和测试您的服务器&#x…

Oracle 19c OCP 1z0 082考场真题解析第17题

考试科目:1Z0-082 考试题量:90 通过分数:60% 考试时间:150min 本文为云贝教育郭一军guoyJoe原创,请尊重知识产权,转发请注明出处,不接受任何抄袭、演绎和未经注明出处的转载。 17. Which three …

AQS之ReentrantReadWriteLock

AQS之ReentrantReadWriteLock 一. 归纳总结 ReentrantReadWriteLock适合读多写少的场景。是可重入的读写锁实现类。其中, 写锁是独占的,读锁是共享的。 支持锁降级(持有写锁、获取读锁,最后释放写锁的过程) 锁降级可以帮助我们…