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

news2025/1/19 14:16:01

前言

         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.coloradmin.cn/o/1344906.html

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

相关文章

机器学习系列11:减少过拟合——L1、L2正则化

如果我们注意到模型在训练集上的表现明显优于模型在测试集上的表现,那么这就是模型过拟合了,也称为 high variance。 产生的过拟合的原因是对于给定的训练集数据来说,模型太复杂了。有几种可以减少过拟合的方法: 收集更多的训练数…

洛谷 P1086:花生采摘 ← 结构体

【题目来源】https://www.luogu.com.cn/problem/P1086https://www.acwing.com/problem/content/description/420/【题目描述】 在告示牌背后,路边真的有一块花生田,花生植株整齐地排列成矩形网格(如图 1)。 有经验的多多一眼就能看…

Net6 Core webApi发布到IIS

Net6 Core Api发布到IIS不同于webapi,依赖框架不同,配置也移至项目内Program.cs 一、发布到指定文件夹和IIS,不过注意IIS应用程序池选择的是 “无托管代码“ 在IIS管理器中点击浏览,访问接口路径报500.19,原因是所依赖…

Prometheus告警处理

Alertmanager介绍 Prometheus 包含一个报警模块,就是 AlertManager,Alertmanager 主要用于接收 Prometheus 发送的告警信息,它支持丰富的告警通知渠道,而且很容易做到告警信息进行去重、降噪、分组等,是一款前卫的告警…

链表精选题集

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

[电磁学]猴博士不挂科

1 利用表格求场强 2 利用叠加求场强 3 利用积分求场强 电场立库仑力 球的面积公式是4πr,其中r为球的半径。 球的体积公式是(4/3)πr,其中r为球的半径。 带电物体有体积:

软件测试/测试开发丨Python 内置库 OS 学习笔记分享

os 概述 os: Operating System os 使用 导入 os 模块 查看 os 模块使用文档 help(os)dir(os) import os# 查看os模块说明文档 help(os)# 查看os模块的属性和方法 print(dir(os))os 操作系统相关 os.name:获取系统名称os.environ:获取系统环境变量信…

是时候将javax替换为Jakarta了

开始 相信很多朋友在使用新版本的Spring的时候,发现了一些叫jakarta的包,看起来有点陌生。 很多时候,比较纠结不知道该导入哪一个包。 jakarta其实就是之前的javax。 主要JavaEE相关的,从之前javax名字也可以看出来&#xff0…

【AMD Xilinx】ZUBoard(2):通过AXI GPIO控制PL端的管脚输出

【AMD Xilinx】ZUBoard(2):通过AXI GPIO控制PL端的管脚输出 一、基本功能和流程二、Vivado工程1. 总体框图2. AXI GPIO相关部分3. 配置AXI GPIO4. 绑定管脚4.1 根据原理图查找对应管脚4.1.1 LED04.1.2 LED1 4.2 I/O Planning 5. XDC 三、ARM代…

python+django游戏分享论坛网站49c2c

本系统主要包括管理员和用户两个角色组成;主要包括首页、个人中心、用户管理、游戏类型管理、游戏文章管理、交流论坛、系统管理等功能的管理系统。 系统权限按管理员和用户两类涉及用户划分。 (1)管理员功能需求 管理员登陆后,主…

c++学习笔记-提高篇-STL-函数对象

目录 一、函数对象 二、函数对象使用 三、谓词 1、概念 2、一元谓词 3、二元谓词 插入一条sort函数源码 四、内建函数对象 1.基本概念 2、算数仿函数 3、关系仿函数 4、逻辑仿函数 一、函数对象 函数对象概念 (1)重载函数调用操作符的类&a…

ESP32:整合存储配网信息和MQTT笔记

文章目录 1.给LED和KEY的所用IO增加配置项1.1 增加配置文件1.2 修改相应的c源码 2. 把mqtt\tcp的工程整合到一起2.1 在何处调用 mqtt_app_start() 3. 测试MQTT4. 完整的工程源码 有一段时间没有玩ESP32,很多知识点都忘记了。今天测试一下MQTT,做个笔记。…

Vue.js学习笔记(1)——Visual Studio Code搭建Vue.js框架

1 安装Node.js 1、下载安装包:进入官网(https://nodejs.org/en),下载左侧的稳定版。 2、选择安装位置,不用勾选自动安装必要工具。 其他都默认Next。 配置环境,具体参考本文章: https://blo…

数据结构之树 --- 二叉树 < 堆 >

目录 1. 树是什么&#xff1f; 1.1 树的表示 2. 二叉树 2.1 二叉树的概念 2.2 特殊的二叉树 2.3 二叉树的性质 2.4 二叉树的存储结构 2.4.1 顺序存储 2.4.2 链式存储 3. 二叉树顺序结构的实现 <堆> 3.1 二叉树的顺序结构 ​编辑 3.2 堆的概念及结构 ​编辑…

啊?这也算事务?!

作者简介&#xff1a;大家好&#xff0c;我是smart哥&#xff0c;前中兴通讯、美团架构师&#xff0c;现某互联网公司CTO 联系qq&#xff1a;184480602&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗互联网寒冬 学习必须往深处挖&…

数据库开发之事务和索引的详细解析

2. 事务 场景&#xff1a;学工部整个部门解散了&#xff0c;该部门及部门下的员工都需要删除了。 操作&#xff1a; -- 删除学工部 delete from dept where id 1; -- 删除成功 ​ -- 删除学工部的员工 delete from emp where dept_id 1; -- 删除失败&#xff08;操作过程中…

Linux升级指南:保持系统安全和高效运行

Linux系统的升级是确保系统稳定和安全性的重要步骤。本文将介绍Linux系统升级的基本概念&#xff0c;以及具体的操作步骤和注意事项&#xff0c;以帮助用户顺利升级他们的Linux系统。 Linux操作系统以其稳定性和可定制性而闻名&#xff0c;它经常通过升级来提供新的功能、修复漏…

C++ 之LeetCode刷题记录(五)

&#x1f604;&#x1f60a;&#x1f606;&#x1f603;&#x1f604;&#x1f60a;&#x1f606;&#x1f603; 开始cpp刷题之旅&#xff0c;多学多练&#xff0c;尽力而为。 先易后难&#xff0c;先刷简单的。 20. 有效的括号 给定一个只包括 ‘(’&#xff0c;‘)’&…

[GDOUCTF 2023]hate eat snake

[GDOUCTF 2023]hate eat snake wp 一般说玩游戏的题答案在源码里&#xff0c;但是本题源码中没有任何跟 “flag” 或者 “ctf” 有关的信息。 页面如下&#xff1a; 唤出控制台 在此页面中 F12 调不出控制台&#xff08;可能是在 js 代码中禁用了&#xff09;。但其实还有两…

结构体:是第几天

今天是该年的第几天 #include<iostream> using namespace std; struct Date //创建结构体 {int year; //年int month; //月int day; //日 }; void inputDate(Date *p) //输入函数 {cin >> p->year >> p->month >> p->day; //输入年、月、…