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()

数学统计函数表

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

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

相关文章

Typora快捷键设置详细教程

文章目录 一、快捷键设置步骤二、设置快捷键简单案例参考资料 一、快捷键设置步骤 在typora软件中,快捷键的设置步骤主要为: 打开【文件】–>【偏好设置】,找到【通用】–>【打开高级设置】,找到 conf.user.json 文件。 然…

系统启动流程 - 理解modules加载流程

​编辑 Hacker_Albert    202 linux 启动流程module加载 1.启动过程分为三个部分 BIOS 上电自检(POST)引导装载程序 (GRUB2)内核初始化启动 systemd,其是所有进程之父。 1.1.BIOS 上电自检(POST) BIOS stands for…

HTML5+CSS3②——图像、超链接、音频、视频

目录 图像 超链接 音频 视频 图像 作用&#xff1a;在网页中插入图片 单标签&#xff1a; 标签名&#xff1a;<img src"图片的URL"> <img src"图片的URL" alt"替换文本" title"提示文本"> 属性写在尖括号里面&#xff0c;…

使用SpringBoot AOP记录操作日志和异常日志

使用SpringBoot AOP记录操作日志和异常日志 平时我们在做项目时经常需要对一些重要功能操作记录日志&#xff0c;方便以后跟踪是谁在操作此功能&#xff1b;我们在操作某些功 能时也有可能会发生异常&#xff0c;但是每次发生异常要定位原因我们都要到服务器去查询日志才能找…

Stable Diffusion 系列教程 - 5 ControlNet

ControlNet和LORA的定位都是对大模型做微调的额外网络。作为入门SD的最后一块拼图是必须要去了解和开发的。为什么ControlNet的影响力如此的大&#xff1f;在它之前&#xff0c;基于扩散模型的AIGC是非常难以控制的&#xff0c;扩散整张图像的过程充满了随机性。这种随机性并不…

FFmpeg学习笔记--Centos8安装FFmpeg

1--安装指令 sudo yum install epel-releasesudo yum localinstall --nogpgcheck https://download1.rpmfusion.org/free/el/rpmfusion-free-release-8.noarch.rpmsudo yum install ffmpeg ffmpeg-develffmpeg -version 2--版本信息

【Transformer】深入理解Transformer模型2——深入认识理解(下)

前言 Transformer模型出自论文&#xff1a;《Attention is All You Need》 2017年 近年来&#xff0c;在自然语言处理领域和图像处理领域&#xff0c;Transformer模型都受到了极为广泛的关注&#xff0c;很多模型中都用到了Transformer或者是Transformer模型的变体&#xff0…

python可视化界面自动生成,python如何做可视化界面

大家好&#xff0c;小编来为大家解答以下问题&#xff0c;python gui可视化操作界面制作&#xff0c;python做出的炫酷的可视化&#xff0c;现在让我们一起来看看吧&#xff01; 目录 前言 一.环境配置 插件&#xff1a; 1.python 2.Chinese 3.Open In Default Browser 安装pyt…

zabbix添加监控主机(agent)并告警

一、添加监控主机 总体来说&#xff0c;在被监控主机上安装部署zabbix-agent&#xff0c;并修改配置文件&#xff08;zabbix_agentd.conf&#xff09;的参数。然后在zabbix 服务端zabbix-get检查是否可以监控。如果可以了&#xff0c;就可以在web页面添加了&#xff0c;要监控…

据报道,微软的下一代 Surface 笔记本电脑将是其首款真正的“人工智能 PC”

明年&#xff0c;微软计划推出 Surface Laptop 6和 Surface Pro 10&#xff0c;这两款设备将提供 Arm 和 Intel 两种处理器选项。不愿意透露姓名的不透露姓名人士透露&#xff0c;这些新设备将引入先进的人工智能功能&#xff0c;包括配备下一代神经处理单元 (NPU)。据悉&#…

vue-mixin(混入---入门到离职系列)

定义 官方定义(官网定义:组合选项 | Vue.js (vuejs.org)) mixins 选项接受一个 mixin 对象数组。这些 mixin 对象可以像普通的实例对象一样包含实例选项&#xff0c;它们将使用一定的选项合并逻辑与最终的选项进行合并。举例来说&#xff0c;如果你的 mixin 包含了一个 create…

【Vue】computed详解

✨ 专栏介绍 在当今Web开发领域中&#xff0c;构建交互性强、可复用且易于维护的用户界面是至关重要的。而Vue.js作为一款现代化且流行的JavaScript框架&#xff0c;正是为了满足这些需求而诞生。它采用了MVVM架构模式&#xff0c;并通过数据驱动和组件化的方式&#xff0c;使…

jQuery日历签到插件下载

jQuery日历签到插件下载-遇见你与你分享

听GPT 讲Rust源代码--src/tools(39)

File: rust/src/tools/rustfmt/src/config/config_type.rs 在Rust代码中&#xff0c;rust/src/tools/rustfmt/src/config/config_type.rs文件的作用是定义了与配置相关的数据结构和函数。 Config struct&#xff08;配置结构体&#xff09;&#xff1a;该结构体用于存储rustfmt…

WEB渗透—PHP反序列化(十一)

Web渗透—PHP反序列化 课程学习分享&#xff08;课程非本人制作&#xff0c;仅提供学习分享&#xff09; 靶场下载地址&#xff1a;GitHub - mcc0624/php_ser_Class: php反序列化靶场课程&#xff0c;基于课程制作的靶场 课程地址&#xff1a;PHP反序列化漏洞学习_哔哩…

FTP的基本介绍

FTP ftp的介绍&#xff1a; ftp是一个可以提供共享文件的服务器&#xff0c;他可以通过iis.msc也就是windows 的服务器管理器来打开&#xff0c;或者通过cmd命令行打开 如何使用iis.msc打开ftp&#xff0c;如何使用cmd打开ftp &#xff0c;如何匿名登录ftp&#xff0c;ftp和…

MySQL入门教程-触发器

9.触发器 什么是触发器 触发器(trigger)&#xff1a;监视某种情况&#xff0c;并进行某种操作&#xff0c;它的执行并不是程序调用&#xff0c;也不是手工启动&#xff0c;而是由事件来触发&#xff0c;例如&#xff1a;对一张表进行操作&#xff08;插入&#xff0c;更新&…

关于表格太大了jupyter无法单次处理的问题

记录下自己的心路历程…耗时耗精力 我用的数据库单个表格就很大&#xff0c;一个表格有30多G&#xff0c;jupyter无法处理这么大的表格&#xff0c;会直接把电脑的进程全部结束掉&#xff0c;结束掉要是能运行成功倒也行啊&#xff0c;然鹅…给我报错说处理不了&#xff0c;罢工…

Rust之构建命令行程序(二):读取文件

开发环境 Windows 10Rust 1.74.1 VS Code 1.85.1 项目工程 这次创建了新的工程minigrep. 读取文件 现在&#xff0c;我们将添加读取file_path参数中指定的文件的功能。首先&#xff0c;我们需要一个样本文件来测试它:我们将使用一个包含少量文本的文件&#xff0c;多行包含一…

技能分析:这就是人们写在简历上的内容

您希望您的技能部分听起来像其他人一样吗&#xff1f;另一方面&#xff0c;您是否想遗漏一项顶级技能&#xff0c;因为许多其他简历也列出了它&#xff1f;在脱颖而出和涵盖雇主寻求的所有技能之间找到平衡可能是一个挑战。 优秀的简历技能部分会考虑到每个雇主所寻求的特质。…