[黑马程序员Pandas教程]——Pandas数据结构

news2024/10/1 9:46:00

目录:

  1. 学习目标
  2. 认识Pandas中的数据结构和数据类型
  3. Series对象
  4. 通过numpy.ndarray数组来创建
  5. 通过list列表来创建
  6. 使用字典或元组创建s对象
  7. 在notebook中不写print
  8. Series对象常用API
  9. 布尔值列表获取Series对象中部分数据
  10. Series对象的运算
  11. DataFrame对象
  12. 创建df对象
  13. DataFrame对象常用API
  14. 布尔值列表获取df对象中部分数据
  15. 根据df对象的判断表达式返回自定义的值
  16. df对象的运算
  17. Pandas的数据类型初识
  18. 总结
  19. 项目地址

1.学习目标

  • 知道什么是DataFrame对象、什么是Seires对象

  • 对Series和DataFrame的常用API有印象、能找到、能看懂

  • 了解Pandas中常用数据类型

  • 知道Series以及DataFrame的运算规则

2.认识Pandas中的数据结构和数据类型

上图为上一节中读取并展示出来的数据,以此为例我们来讲解Pandas的核心概念,以及这些概念的层级关系:

  • DataFrame

    • Series

      • 索引列

        • 索引名、索引值

        • 索引下标、行号

      • 数据列

        • 列名

        • 列值,具体的数据

其中最核心的就是Pandas中的两个数据结构:DataFrame和Series

3.Series对象

  • Series也是Pandas中的最基本的数据结构对象,下文中简称s对象;是DataFrame的列对象或者行对象,series本身也具有索引。

  • Series是一种类似于一维数组的对象,由下面两个部分组成:

    • values:一组数据(numpy.ndarray类型)

    • index:相关的数据索引标签;如果没有为数据指定索引,于是会自动创建一个0到N-1(N为数据的长度)的整数型索引。

4.通过numpy.ndarray数组来创建

​​​​​​​

import numpy as np
import pandas as pd

# 自动生成索引
# 创建numpy.ndarray对象
# array([1, 2, 3])
# print打印输出 [1 2 3]
# type()为<class 'numpy.ndarray'>
n1 = np.array([1, 2, 3])
print(n1)
print(type(n1))

# 创建Series对象
# type()为<class 'pandas.core.series.Series'>
s1 = pd.Series(n1)
print(s1)
print(type(s1))

# 创建Series对象,同时指定索引
# type()为<class 'pandas.core.series.Series'>
s1 = pd.Series(n1, index=['A', 'B', 'C'])
print(s1)
print(type(s1))

5.通过list列表来创建

import pandas as pd

# 使用默认自增索引
s2 = pd.Series([1, 2, 3])
print(s2)
# 自定义索引
s3 = pd.Series([1, 2, 3], index=['A', 'B', 'C'])
print(s3)

6.使用字典或元组创建s对象

import pandas as pd

# 使用元组
tst = (1, 2, 3, 4, 5, 6)
s1 = pd.Series(tst)
print(s1)
print(type(s1))

# 使用字典:
dst = {'A': 1, 'B': 2, 'C': 3, 'D': 4, 'E': 5, 'F': 6}
s2 = pd.Series(dst)
print(s2)
print(type(s2))

7.在notebook中不写print

  • 在JupyterNotebook中,默认只会打印输出最后出现的变量名;许多时候我们要写大量的print;通过下面的2行代码即可解决这个问题
import pandas as pd

# 在notebook执行代码之前首先需要先执行下面代码以设置InteractiveShell.ast_node_interactivity参数
from IPython.core.interactiveshell import InteractiveShell

InteractiveShell.ast_node_interactivity = 'all'
# 这个方法的作用范围仅限当前kernel(一个.ipynb文件对应一个kernel)
# 可以让我们在jupyternotebook中不用写print

# 使用默认自增索引
s2 = pd.Series([1, 2, 3])
s2
# 自定义索引
s3 = pd.Series([1, 2, 3], index=['A', 'B', 'C'])
s3

 8.Series对象常用API

import pandas as pd

# 构造一个Series对象
s4 = pd.Series([i for i in range(6)], index=[i for i in 'ABCDEF'])
print(s4)

# Series对象常用属性和方法

# s对象有多少个值,int
print(len(s4))
print(s4.size)

# s对象有多少个值,单一元素构成的元组 (6,)
print(s4.shape)

# 查看s对象中数据的类型
print(s4.dtypes)

# s对象转换为list列表
print(s4.to_list())

# s对象的值 array([0, 1, 2, 3, 4, 5], dtype=int64)
print(s4.values)

# s对象的值转换为列表
print(s4.values.tolist())

# s对象可以遍历,返回每一个值
for i in s4:
    print(i)

# 下标获取具体值
print(s4[1])

# 返回前2个值,默认返回前5个
print(s4.head(2))

# 返回最后1个值,默认返回后5个
print(s4.tail(1))

# 获取s对象的索引 Index(['A', 'B', 'C', 'D', 'E', 'F'], dtype='object')
print(s4.index)

# s对象的索引转换为列表
print(s4.index.to_list())

# s对象中数据的基础统计信息
print(s4.describe())

# 返回结果及说明如下
# count    6.000000 # s对象一共有多少个值
# mean     2.500000 # s对象所有值的算术平均值
# std      1.870829 # s对象所有值的标准偏差
# min      0.000000 # s对象所有值的最小值
# 25%      1.250000 # 四分位 1/4位点值
# 50%      2.500000 # 四分位 1/2位点值
# 75%      3.750000 # 四分位 3/4位点值
# max      5.000000 # s对象所有值的最大值
# dtype: float64
# 标准偏差是一种度量数据分布的分散程度之标准,用以衡量数据值偏离算术平均值的程度。标准偏差越小,这些值偏离平均值就越少,反之亦然。
# 四分位数(Quartile)也称四分位点,是指在统计学中把所有数值由小到大排列并分成四等份,处于三个分割点位置的数值。

# seriest对象转换为df对象
df = pd.DataFrame(s4)
print(df)
print(type(df))

9.布尔值列表获取Series对象中部分数据

import pandas as pd

s4 = pd.Series([i for i in range(6)], index=[i for i in 'ABCDEF'])

# 构造布尔值构成的列表,元素数量和s对象的值数量相同
bool_list = [True]*3 + [False]*3
print(bool_list)

# Series[[True, False, ...]]
print(s4[bool_list])
print(s4[[True, True, True, False, False, False]])

10.Series对象的运算

  • Series和数值型变量计算时,变量会与Series中的每个元素逐一进行计算

  • 两个Series之间计算,索引值相同的元素之间会进行计算;索引不同的元素最终计算的结果会填充成缺失值,用NaN表示

import pandas as pd

s4 = pd.Series([i for i in range(6)], index=[i for i in 'ABCDEF'])

# Series和数值型变量计算
print(s4 * 5)


# 索引完全相同的两个Series对象进行计算
print(s4)
# 构造与s4索引相同的s对象
s5 = pd.Series([10] * 6, index=[i for i in 'ABCDEF'])
print(s5)
# 两个索引相同的s对象进行运算
print(s4 + s5)


# 索引不同的两个s对象运算
print(s4)
# 注意s6的最后一个索引值和s4的最后一个索引值不同
s6 = pd.Series([10]*6, index=[i for i in 'ABCDEG'])
print(s6)
print(s4 + s6)

11.DataFrame对象

  • DataFrame是一个表格型的数据结构,它含有一组或多组有序的列(Series),每列可以是不同的值类型(数值、字符串、布尔值等)。
  • DataFrame是Pandas中的最基本的数据结构对象,简称df;可以认为df就是一个二维数据表,这个表有行有列有索引

  • DataFrame是Pandas中最基本的数据结构,Series数据对象的许多属性和方法在DataFrame中也一样适用

12.创建df对象 

DataFrame的创建有很多种方式

  • Serires对象转换为df:上一小节中学习了s.to_frame()以及s.reset_index()

  • 读取文件数据返回df:在之前的学习中我们使用了pd.read_csv('csv格式数据文件路径')的方式获取了df对象

  • 使用字典、列表、元组创建df:接下来就展示如何使用字段、列表、元组创建df

import pandas as pd

# 使用字典加列表创建df,使默认自增索引
df1_data = {
    '日期': ['2021-08-21', '2021-08-22', '2021-08-23'],
    '温度': [25, 26, 50],
    '湿度': [81, 50, 56]
}
df1 = pd.DataFrame(data=df1_data)
print(df1)
print(type(df1))

# 使用列表加元组创建df,并自定义索引
df2_data = [
    ('2021-08-21', 25, 81),
    ('2021-08-22', 26, 50),
    ('2021-08-23', 27, 56)
]
df2 = pd.DataFrame(
    data=df2_data,
    columns=['日期', '温度', '湿度'],
    index=['row_1', 'row_2', 'row_3']  # 手动指定索引
)
print(df2)
print(type(df2))

 13.DataFrame对象常用API

import pandas as pd

# 使用列表加元组创建df,并自定义索引
df2_data = [
    ('2021-08-21', 25, 81),
    ('2021-08-22', 26, 50),
    ('2021-08-23', 27, 56)
]
df2 = pd.DataFrame(
    data=df2_data,
    columns=['日期', '温度', '湿度'],
    index=['row_1', 'row_2', 'row_3']  # 手动指定索引
)

# 返回df的行数
print(len(df2))

# df中数据的个数
print(df2.size)

# df中的行数和列数,元组 (行数, 列数)
print(df2.shape)

# 返回列名和该列数据的类型
print(df2.dtypes)

# 返回nparray类型的2维数组,每一行数据作为一维数组,所有行数据的数组再构成一个二维数组
print(df2.values)

# 返回df的所有列名
print(df2.columns)

# df遍历返回的只是列名
for col_name in df2:
    print(col_name)

# 返回df的索引对象
print(df2.index)

# 返回第一行数据,默认前5行
print(df2.head(1))

# 返回倒数第1行数据,默认倒数5行
print(df2.tail(1))

# 返回df的基本信息:索引情况,以及各列的名称、数据数量、数据类型
# series对象没有info()方法
print(df2.info())

# 返回df对象中所有数字类型数据的基础统计信息
# 返回对象的内容和Series.describe()相同
print(df2.describe())

# 返回df对象中全部列数据的基础统计信息
print(df2.describe(include='all'))

14.布尔值列表获取df对象中部分数据

import pandas as pd

# 使用列表加元组创建df,并自定义索引
df2_data = [
    ('2021-08-21', 25, 81),
    ('2021-08-22', 26, 50),
    ('2021-08-23', 27, 56)
]
df2 = pd.DataFrame(
    data=df2_data,
    columns=['日期', '温度', '湿度'],
    index=['row_1', 'row_2', 'row_3']  # 手动指定索引
)

print(df2[[True, False, True]])

15.根据df对象的判断表达式返回自定义的值

import pandas as pd

# 使用列表加元组创建df,并自定义索引
df2_data = [
    ('2021-08-21', 25, 81),
    ('2021-08-22', 26, 50),
    ('2021-08-23', 27, 56)
]
df2 = pd.DataFrame(
    data=df2_data,
    columns=['日期', '温度', '湿度'],
    index=['row_1', 'row_2', 'row_3']  # 手动指定索引
)

print(df2.index != 'row_2')
print(df2[df2.index != 'row_2'])

16.df对象的运算

  • 当DataFrame和数值进行运算时,DataFrame中的每一个元素会分别和数值进行运算,但df中的数据存在非数值类型时不能做加减除法运算

  • 两个DataFrame之间、以及df和s对象进行计算,和2个series计算一样,会根据索引的值进行对应计算:当两个对象的索引值不能对应时,不匹配的会返回NaN

import pandas as pd

df1_data = {
    '日期': ['2021-08-21', '2021-08-22', '2021-08-23'],
    '温度': [25, 26, 50],
    '湿度': [81, 50, 56]
}
df1 = pd.DataFrame(data=df1_data)
print(df1)

# 使用列表加元组创建df,并自定义索引
df2_data = [
    ('2021-08-21', 25, 81),
    ('2021-08-22', 26, 50),
    ('2021-08-23', 27, 56)
]
df2 = pd.DataFrame(
    data=df2_data,
    columns=['日期', '温度', '湿度'],
    index=['row_1', 'row_2', 'row_3']  # 手动指定索引
)
print(df2)

# 不报错
print(df2 * 2)
# 报错,因为df2中有str类型(Object)的数据列
# print(df2 + 1)


# df和df进行运算
# 索引完全不匹配
print(df1 + df2)

# 构造部分索引和df2相同的新df
df3 = df2[df2.index!='row_3']
print(df3)

# 部分索引相同
print(df2 + df3)

17.Pandas的数据类型初识

  • df或s对象中具体每一个值的数据类型有很多,如下表所示

Pandas数据类型说明对应的Python类型
Object字符串类型string
int整数类型int
float浮点数类型float
datetime日期时间类型datetime包中的datetime类型
timedelta时间差类型datetime包中的timedelta类型
category分类类型无原生类型,可以自定义
bool布尔类型True,False
nan空值类型None
  • 可以通过下列API查看s对象或df对象中数据的类型

s1.dtypes
df1.dtypes
df1.info() # s对象没有info()方法
  • `int64`后边的64表示所占字节数

18.总结

  • 理解类知识点

    • dataframe和series对象是什么:

      • 可以认为df是有行有列有索引的二维数据表

      • df和s是Pandas中最核心的数据结构

      • df中每一列或者每一行都是s对象

      • s对象也有索引

      • 每一个s对象都有各自的数据类型,表示构成这个s对象中的值的type;常用的数据类型有

        • Object -- 字符串

        • int -- 整数

        • float -- 小数

​​​​​​​

series和dataframe的API

# <s/df>表示s对象或df对象
<s/df>.size # 返回数据个数
<s/df>.shape # s返回(行数,),df返回(行数,列数)
<s/df>.dtypes # s返回数据类型,df返回列名和该列数据的类型
<s/df>.values # 返回全部值
<s/df>.index # 查看索引
<s/df>.head() # s返回前5个数据,df返回前5行数据
<s/df>.tail() # s返回后5个数据,df返回后5行数据
df.info() # 返回df的基本信息:索引情况,以及各列的名称、数据数量、数据类型;s对象没有这个函数
<s/df>.describe() # 返回s或df对象中所有数值类型数据的基础统计信息
df.describe(include='all') # 返回df对象中全部列数据的基础统计信息

series以及dataframe的运算

  • 当s或df和数值进行运算时,每一个具体的值会分别和数值进行运算,但s或df中的数据存在非数值类型时不能做加减除法运算
  • 两个s之间、两个df之间,以及df和s对象进行计算,会根据索引的值进行对应计算,当两个对象的索引值不能对应时,不匹配的会返回NaN

判断表达式

  • s对象的判断表达式返回由布尔值构成的numpy.ndarray数组

    • s > 0 ==> array([True, False, True])

    • df.index!='row_2' ==> array([True, False, True])

  • 布尔值列表或数组获取s或df对象中部分数据的方法:返回True对应的(行)数据

    • s[[True, True, True, False, False, False]] or s[s>0]

    • df[[True, True, True, False, False, False]] or df[df.index!='xxx']

19.项目地址

Python: 66666666666666 - Gitee.com

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

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

相关文章

漏洞复现--用友NC accept.jsp任意文件上传

免责声明&#xff1a; 文章中涉及的漏洞均已修复&#xff0c;敏感信息均已做打码处理&#xff0c;文章仅做经验分享用途&#xff0c;切勿当真&#xff0c;未授权的攻击属于非法行为&#xff01;文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直…

剑指JUC原理-14.ReentrantLock原理

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱吃芝士的土豆倪&#xff0c;24届校招生Java选手&#xff0c;很高兴认识大家&#x1f4d5;系列专栏&#xff1a;Spring源码、JUC源码&#x1f525;如果感觉博主的文章还不错的话&#xff0c;请&#x1f44d;三连支持&…

为什么免费证书的有效期为90天

关心SSL证书的朋友们最近可能发现&#xff0c;包括阿里云&#xff0c;亚洲诚信在内的SSL证书服务商&#xff0c;都已经陆续的把之前一年期的免费证书调整为90天有效期&#xff0c;之前的一年期证书价格从免费上涨到几十到几百元不等&#xff0c;这是为什么呢&#xff1f;为什么…

阿里云双十一活动经济型e实例2核2G3M带宽配置云服务器搭建网站教程参考

阿里云2023双十一推出的优惠活动“金秋云创季”&#xff0c;轻量应用服务器2核2G3M带宽只要87元1年&#xff0c;2核4G4M带宽只要165元1年。云服务ECS下的经济型e实例2核2G 3M固定带宽&#xff0c;价格只要99元/1年&#xff0c;新老用户都可购买&#xff0c;同时在2026年3月31日…

19、Python单元测试基础:unittest模块的基本使用

文章目录 创建测试用例测试套件断言运行测试测试固件Python的unittest模块是基于Java的JUnit框架开发出来的,提供了编写和运行单元测试的工具。这篇文章将介绍unittest模块的基本使用,涵盖创建测试用例、测试套件、断言、运行测试以及测试固件的使用。 创建测试用例 在unit…

“菊风Juphoon”邀您莅临11月22-24日CNF南京应急展消防展 | 展位号:115-1

公司简介 菊风依托互联网和电信网音视频融合技术积累&#xff0c;提供智能化的音视频统一通信产品及服务。面向应急管理、消防救援、智慧城市等多个领域&#xff0c;菊风推出适用于全网通的统一通信一体机、统一通信平台。 此外&#xff0c;菊风还提供视频能力平台&#xff0…

2 创建svelte项目(应用程序)

官网方式搭建&#xff1a; npm create sveltelatest my-app cd my-app npm install npm run dev 官网中介绍&#xff1a; 如果您使用的是 VS Code&#xff0c;安装 Svelte for VS Code 就可以了&#xff0c;以便语法高亮显示。 然后&#xff0c;一旦您的项目设置好了&#…

网上书店项目

源码下载地址 支持&#xff1a;远程部署/安装/调试、讲解、二次开发/修改/定制 程序运行视频查看 管理员 图书管理 添加图书 删除图书(可批量删除) 修改图书 查看图书(分页查看) 图书上下架(可批量处理) 图书推荐&#xff08;新品推荐、精品推荐&#xff0c;可批量处理&#…

IGP高级特性简要介绍(OSPF-上篇)

OSPF高级特性 一、OSPF_提升故障收敛及网络恢复速度 1.FRR与BFD快速恢复故障 1.1 FRR 在传统转发模式下&#xff0c;当到达同一个目的网络存在多条路由时&#xff0c;路由器总是选择最优路由使用&#xff0c;并且下发到FIB表指导数据转发。 当最优路由故障时&#xff0c;需…

辐射骚扰整改思路及方法:参数选择与解决之道?|深圳比创达电子EMC

辐射骚扰整改思路及方法&#xff1a;参数选择与解决之道&#xff1f;相信不少人是有疑问的&#xff0c;今天深圳市比创达电子科技有限公司就跟大家解答一下&#xff01; 某产品首次EMC测试时&#xff0c;辐射、静电、浪涌均失败。本篇文章就“参数选择与解决之道”问题进行详细…

Go语言Gin框架前后端分离项目开发工程化实例

文章目录 基本数据配置配置文件管理数据库配置路由配置封装公共方法 数据库模型数据表内容model文件DTO文件 中间件错误异常捕获中间件跨域中间件token认证中间件JWT 控制器UserController 运行调试注册接口登录接口获取用户信息 构建发布项目前端VUE调用接口 基本数据配置 配…

持续集成交付CICD:Jenkins Pipeline与远程构建触发器

目录 一、实验 1.Jenkins Pipeline本地构建触发器 2.Jenkins Pipeline与远程构建触发器&#xff08;第一种方式&#xff09; 3.Jenkins Pipeline与远程构建触发器&#xff08;第二种方式&#xff09; 4.Jenkins Pipeline与远程构建触发器&#xff08;第三种方式&#xff0…

Android 安卓 Soong构建系统——Blueprint Android.bp配置文件解析

文章目录 Android.bp起源Android.bp文件结构如何编写Android.bp文件实例详解实例1实例2 常见问题解答1. 如何确定使用哪种模块类型&#xff1f;2. 如何指定模块的依赖项&#xff1f;其他疑问可参考官方文档 参考文章&#xff1a;Android.bp 语法和使用 Android.bp起源 早期的A…

Python二级 每周练习题25

如果你感觉有收获&#xff0c;欢迎给我打赏 ———— 以激励我输出更多优质内容 练习一: 运算规则如下: (1) 若该数是偶数&#xff0c;&#xff0c;则变为原数的一半 (2) 若该数是奇数&#xff0c;则变为原数的3倍加1 (3) 重复 (1) (2)&#xff0c;直到该数变为1。 编写程序实…

Gradle笔记 二 Gradle的基础Groovy

学习Groovy的必要性 首先Gradle是由Groovy写成的&#xff0c;而且构建脚本的语法都遵循Groovy的语法&#xff0c;所以要学好Gradle的前提是要基本了解Groovy的语法。 Groovy 简介 在某种程度上&#xff0c;Groovy可以被视为Java的一种脚本化改良版,Groovy也是运行在JVM上&am…

什么是微服务?与分布式又有什么区别?

什么是微服务&#xff0c;我们先从传统的单体结构进行了解&#xff0c;对两者进行对比。 单体结构 单体结构是一种传统的软件架构模式&#xff0c;它将应用程序划分为一组相互依赖的模块和组件。这些模块和组件通常都是构建在同一个平台上的&#xff0c;并且紧密耦合在一起。…

本地生活商家想选择靠谱的服务商就这样做,还可以借助批量剪辑来进一步提升营销价值

本地生活商家怎么选择靠谱的服务商&#xff1f; 在抖音本地生活的赛道里&#xff0c;商家除了花精力去搭建自己的团队之外&#xff0c;还可以选择和服务商合作&#xff0c;来实现商单的分发与销售&#xff0c;那么如何和服务商建立合作呢&#xff1f; 今天&#xff0c;来为商…

MG-Soft MIB Browser使用教程

图片 MG-Soft公司是一家老牌的监控工具&#xff0c;是目前全球领先的网络管理&#xff0c;SNMP监控的领导厂商&#xff1b; 我发现很多客户都在使用该软件&#xff0c;比如近期参加的某大型企业招标测试就使用的该软件&#xff0c;该软件比我之前写的ireasoning MIB Browser …

做什么数据表格啊,要做就做数据可视化

是一堆数字更易懂&#xff0c;还是图表更易懂&#xff1f;很明显是图表&#xff0c;特别是数据可视化图表。数据可视化是一种将大量数据转化为视觉形式的过程&#xff0c;通过图形、图表、图像等方式呈现数据&#xff0c;以便更直观地理解和分析。 数据可视化更加生动、形象地…

文件怎么加密丨4种文件加密方法盘点

一 、如何给word文件加密&#xff1f; 1. 打开word&#xff0c;点击“文件”。 2. 点击“信息”&#xff0c;选择“保护文档”&#xff0c;并选择“用密码进行加密”。 3. 在弹出的小窗口&#xff0c;我们可以添加密码&#xff0c;并点击确定即可。 二、如何给excel表格进行加…