当前位置: 首页 > news >正文

Pandas-DataFrame入门

文章目录

  • 一. Pandas DataFrame简介
  • 二. 加载数据集
    • 1. 目的
    • 2. 步骤
      • ① 导包
      • ② 加载csv
      • ③ 查看数据类型及属性
      • ④ Pandas与Python常用数据类型对照
  • 三. 查看部分数据
    • 1. 根据列名加载部分列数据
      • ① 加载一列数据,通过df['列名']方式获取
      • ② 加载多列数据,通过df[['列名1','列名2',...]]
    • 2. 按行加载部分数据
      • ① head()
      • ③ tail()
      • ② loc:通过行索引获取指定行数据
      • ④ loc:通过索引标签获取指定多行数据
      • ⑤ iloc:通过行号获取行数据
    • 3. 获取指定行/列数据
      • ① loc和iloc属性既可以用于获取列数据,也可以用于获取行数据
      • ② 使用 loc 获取数据中的1列/几列
      • ③ 使用 iloc 获取数据中的1列/几列
      • ④ 如果loc 和 iloc 传入的参数弄混了,会报错
      • ⑤ 通过range 生成序号,结合iloc 获取连续多列数据
      • ⑥ 在 iloc中使用切片语法获取几列数据
      • ⑦ 使用 loc/iloc 获取指定行,指定列的数据
      • ⑧ 获取多行多列
  • 四. 分组和聚合计算
    • 1. 分组和聚合介绍
    • 2. 分组方式
    • 3. 分组频数计算
  • 五. 基本绘图

一. Pandas DataFrame简介

  • Pandas是用于数据分析的开源Python库,可以实现数据加载,清洗,转换,统计处理,可视化等功能
  • DataFrame和Series是Pandas最基本的两种数据结构
  • DataFrame用来处理结构化数据(SQL数据表,Excel表格)
  • Series用来处理单列数据,也可以把DataFrame看作由Series对象组成的字典或集合

二. 加载数据集

1. 目的

  • 做数据分析首先要加载数据,并查看其结构和内容,对数据有初步的了解
  • 查看行,列数据分布情况
  • 查看每一列中存储信息的类型

2. 步骤

① 导包

在这里插入图片描述

② 加载csv

df = pd.read_csv('data/scientists.csv')
df.head()

在这里插入图片描述

csv文件:Comma-Separated Values
也可以通过指定分隔符加载tsv文件

df = pd.read_csv('data/scientists.tsv', sep='\t')
df.head()

tsv文件 Tab-Separated Values

③ 查看数据类型及属性

  • 查看df类型

    type(df) 
    
      pandas.core.frame.DataFrame
    
  • 查看df的shape属性,可以获取DataFrame的行数,列数

    df.shape
    
      (8, 5)
    
  • 查看df的columns属性,获取DataFrame中的列名

    df.columns
    
      Index(['Name', 'Born', 'Died', 'Age', 'Occupation'], dtype='object')
    
    df.index
    
      Index(['Name', 'Born', 'Died', 'Age', 'Occupation'], dtype='object')
    
  • 查看df的dtypes属性,获取每一列的数据类型

    df.dtypes
    
      Name          objectBorn          objectDied          objectAge            int64Occupation    objectdtype: object
    
    df.info()
    

    在这里插入图片描述

    df.info()
    

    在这里插入图片描述

    df.describe()
    

    在这里插入图片描述

④ Pandas与Python常用数据类型对照

在这里插入图片描述

三. 查看部分数据

1. 根据列名加载部分列数据

① 加载一列数据,通过df[‘列名’]方式获取

df = pd.read_csv('data/nobel_prizes.csv')    
df

在这里插入图片描述

country_df = df['category']
country_df

在这里插入图片描述

② 加载多列数据,通过df[[‘列名1’,‘列名2’,…]]

注意这里是两层[] 可以理解为 df[列名的list]

subset = df[['category','year']]
subset

在这里插入图片描述

2. 按行加载部分数据

① head()

df.head()

在这里插入图片描述

③ tail()

df.tail(n=1)

在这里插入图片描述

② loc:通过行索引获取指定行数据

行索引介绍
先打印前5行数据 观察第一列
print(df.head())
最左边一列是行号,也就是DataFrame的行索引
Pandas默认使用行号作为行索引

loc属性传入行索引,来获取DataFrame的部分数据(一行,或多行)

④ loc:通过索引标签获取指定多行数据

df.loc[0]
df.loc[99]
last_row_index = df.index[-1]
df.loc[last_row_index]

在这里插入图片描述

⑤ iloc:通过行号获取行数据

在当前案例中,使用iloc 和 loc效果是一样的
需要注意的是,iloc传入的是索引的序号,loc是索引的标签
使用iloc时可以传入-1来获取最后一行数据,使用loc的时候不行

df.iloc[-1]

在这里插入图片描述

3. 获取指定行/列数据

① loc和iloc属性既可以用于获取列数据,也可以用于获取行数据

df.loc[[行],[列]]
df.iloc[[行],[列]]

df = pd.read_csv('data/scientists.csv')
df

在这里插入图片描述

df.loc[[0],['Name']]

在这里插入图片描述

df.iloc[[0],[0]]

在这里插入图片描述

② 使用 loc 获取数据中的1列/几列

df.loc[[所有行],[列名]]
取出所有行,可以使用切片语法 df.loc[ : , [列名]]

df.loc[:,['Name']]

在这里插入图片描述

df.loc[:,['Name','Age']]

在这里插入图片描述

③ 使用 iloc 获取数据中的1列/几列

df.iloc[:,[列序号]] # 列序号可以使用-1代表最后一列

df.iloc[:,[1,3,-1]]

在这里插入图片描述

④ 如果loc 和 iloc 传入的参数弄混了,会报错

loc 只能接受行/列 的名字,
iloc只能接受行/列的序号
在这里插入图片描述
在这里插入图片描述

⑤ 通过range 生成序号,结合iloc 获取连续多列数据

tmp_range = list(range(4))
print(tmp_range)
df.iloc[:, tmp_range]

在这里插入图片描述

tmp_range = list(range(1,3))
print(tmp_range)
df.iloc[:, tmp_range]

在这里插入图片描述

⑥ 在 iloc中使用切片语法获取几列数据

顾头不顾尾

df.iloc[:,2:4]

在这里插入图片描述

df.iloc[:,0:4:2]

在这里插入图片描述

⑦ 使用 loc/iloc 获取指定行,指定列的数据

df.loc[0,'Name']
df.iloc[0,0]
'Rosaline Franklin'

⑧ 获取多行多列

df.loc[2:6,['Name','Age']]

在这里插入图片描述

df.iloc[2:6,[0,3]]

在这里插入图片描述

四. 分组和聚合计算

1. 分组和聚合介绍

  • 在我们使用Excel或者SQL进行数据处理时,Excel和SQL都提供了基本的统计计算功能
  • 当我们再次查看gapminder数据的时候,可以根据数据提出几个问题
    • 每一年的平均预期寿命是多少?每一年的平均人口和平均GDP是多少?
    • 如果我们按照大洲来计算,每年个大洲的平均预期寿命,平均人口,平均GDP情况又如何?
    • 在数据中,每个大洲列出了多少个国家和地区?

2. 分组方式

  • 对于上面提出的问题,需要进行分组-聚合计算
    • 先将数据分组(每一年的平均预期寿命问题 按照年份将相同年份的数据分成一组)
    • 对每组的数据再去进行统计计算如,求平均,求每组数据条目数(频数)等
    • 再将每一组计算的结果合并起来
  • 可以使用DataFrame的groupby方法完成分组/聚合计算
df.groupby('year')['lifeExp'].mean()

在这里插入图片描述

  • 将前面一行代码拆开,逐步分析
    • 通过df.groupby(‘year’)先创一个分组对象
    • 从分组之后的数据DataFrameGroupBy中,传入列名进行进一步计算
    • 返回结果为一个 SeriesGroupBy ,其内容是分组后的数据
    • 对分组后的数据计算平均值

如果想对多列值进行分组聚合代码也类似

df.groupby(['year','continent'])['lifeExp','gdpPercap'].mean()

在这里插入图片描述

3. 分组频数计算

  • 在数据分析中,一个常见的任务是计算频数
    • 可以使用 nunique 方法 计算Pandas Series的唯一值计数
    • 可以使用 value_counts 方法来获取Pandas Series 的频数统计
    • 在数据中,每个大洲列出了多少个国家和地区?
df.groupby('continent')['country'].nunique()

在这里插入图片描述

df.groupby('continent')['country'].unique()

在这里插入图片描述

df['country'].value_counts()

在这里插入图片描述

五. 基本绘图

视化在数据分析的每个步骤中都非常重要
在理解或清理数据时,可视化有助于识别数据中的趋势

df.groupby('year')['lifeExp'].mean().plot()

在这里插入图片描述

相关文章:

Pandas-DataFrame入门

文章目录 一. Pandas DataFrame简介二. 加载数据集1. 目的2. 步骤① 导包② 加载csv③ 查看数据类型及属性④ Pandas与Python常用数据类型对照 三. 查看部分数据1. 根据列名加载部分列数据① 加载一列数据,通过df[列名]方式获取② 加载多列数据,通过df[[…...

爬虫 - 爬取王者荣耀所有皮肤图片

结果展示 安装 pip install requests logger代码 import json import os import re from concurrent.futures import ThreadPoolExecutorimport requests from loguru import loggerdef parse_url(url, bFalse):try:headers {"User-Agent": "Mozilla/5.0 (Wi…...

【畅购商城】购物车模块之查看购物车

目录 分析 接口 后端实现 前端实现:显示页面 前端实现:显示购物车信息 分析 用户如果没有登录,购物车存放在浏览器端的localStorage处,且以数组的方式进行存储。用户如果登录了,购物车存放在redis中&#xff0c…...

Spring Boot 学习笔记

学习代码第一步&#xff1a;如何写 Hello world &#xff1f; 1、新建项目 新建一个 Maven Java 工程&#xff0c;在 pom.xml 文件中添加 Spring Boot Maven 依赖&#xff1a; <parent><groupId>org.springframework.boot</groupId><artifactId>spri…...

快速打造智能应用:从设计到上线的全流程指南

随着人工智能技术的快速发展&#xff0c;如何将大模型技术转化为实际应用成为了各行业关注的焦点。本文将以一个经典的 RAG&#xff08;检索增强生成&#xff09;知识问答系统为例&#xff0c;详细介绍从智能体设计到最终应用部署的全流程。通过结合阿里云的魔笔低代码平台和丰…...

Java-将一个大列表均分成多个小列表,每个小列表包含10个元素

要将一个大列表均分成多个小列表,每个小列表包含10个元素,可以使用多种方法。以下是几种常 见的方法: 方法一:使用 subList 这是你已经提到的方法,通过 subList 来获取子列表。 import java.util.ArrayList; import java.util.List;public class BatchProcessingExamp…...

tcp_rcv_synsent_state_process函数

tcp_rcv_synsent_state_process 是 Linux Kernel 中用于处理 TCP 连接在 SYN-SENT 状态下接收到报文的函数。这个函数在 TCP 三次握手阶段起到了至关重要的作用,处理了在客户端发送 SYN 请求之后收到服务器响应报文的各种情况。 以下是这个函数的解读和剖析: int tcp_rcv_sy…...

关于无线AP信道调整的优化(锐捷)

目录 一、信道优化的基本原则二、2.4G频段信道优化三、5G频段信道优化四、信道优化代码具体示例五、其他优化措施 一、信道优化的基本原则 信道优化旨在减少信道间的干扰&#xff0c;提高网络覆盖范围和信号质量。基本原则包括&#xff1a; 1. 选择合适的信道&#xff1a;根据…...

C#编写的金鱼趣味小应用 - 开源研究系列文章

今天逛网&#xff0c;在GitHub中文网上发现一个源码&#xff0c;里面有这个金鱼小应用&#xff0c;于是就下载下来&#xff0c;根据自己的C#架构模板进行了更改&#xff0c;最终形成了这个例子。 1、 项目目录&#xff1b; 2、 源码介绍&#xff1b; 1) 初始化&#xff1b; 将样…...

计算机网络|数据流向剖析与分层模型详解

文章目录 一、网络中的数据流向二、计算机网络通信模型1.OSI 模型2.TCP/IP 模型3.TCP/IP五层模型3.1 分层架构描述3.2各层地址结构3.3UDP数据包报头结构 三、总结 一、网络中的数据流向 在计算机网络中&#xff0c;数据的流向是指数据从发送端到接收端的传输路径。数据流向涉及…...

某些iphone手机录音获取流stream延迟问题 以及 录音一次第二次不录音问题

一些型号的iphone手机录音获取流stream延迟问题 以及 录音一次第二次不录音问题 延迟问题 navigator.mediaDevices.getUserMedia({ audio: true }) .then((stream) > {console.log(stream) }&#xff09;从开始到获取stream会有将近2s的延迟 导致按下按钮开始录音 会有前…...

gazebo_world 基本围墙。

如何使用&#xff1f; 参考gazebo harmonic的官方教程。 本人使用harmonic的template&#xff0c;在里面进行修改就可以分流畅地使用下去。 以下是world 文件. <?xml version"1.0" ?> <!--Try sending commands:gz topic -t "/model/diff_drive/…...

Ubuntu 上高效实现 Texlive 安装和管理

文章目录 介绍操作步骤1. 下载 Texlive 安装包2. 解压安装包3. 安装基础安装命令通用的 scheme 选项 4. 配置环境变量 使用 tlmgr 管理包总结 介绍 Texlive 是学术和技术文档编写的重要工具, 选择适合的安装方案能帮助您提升效率并减少磁盘空间占用. 本文将为您提供在 Ubuntu …...

LeetCOde914 卡牌分组

扑克牌分组问题&#xff1a;探索最大公约数的应用 在编程的世界里&#xff0c;我们经常会遇到各种有趣的算法问题&#xff0c;今天要和大家分享的是一道关于扑克牌分组的问题&#xff0c;它巧妙地运用了最大公约数的概念来解决。 一、问题描述 给定一副牌&#xff0c;每张牌…...

MicroDiffusion——采用新的掩码方法和改进的 Transformer 架构,实现了低预算的扩散模型

介绍 论文地址&#xff1a;https://arxiv.org/abs/2407.15811 现代图像生成模型擅长创建自然、高质量的内容&#xff0c;每年生成的图像超过十亿幅。然而&#xff0c;从头开始训练这些模型极其昂贵和耗时。文本到图像&#xff08;T2I&#xff09;扩散模型降低了部分计算成本&a…...

QWT 之 QwtPlotDirectPainter直接绘制

QwtPlotDirectPainter 是 Qwt 库中用于直接在 QwtPlot 的画布上绘制图形的一个类。它提供了一种高效的方法来实时更新图表&#xff0c;特别适合需要频繁更新的数据可视化应用&#xff0c;例如实时数据流的显示。 使用 QwtPlotDirectPainter 的主要优势在于它可以绕过 QwtPlot 的…...

埃斯顿机器人程序案例多个点位使用变量

多个点位使用变量取放...

【数据分析】贝叶斯定理

文章目录 一、贝叶斯定理的基本形式二、贝叶斯定理的推导三、贝叶斯定理的应用四、贝叶斯定理的优势与挑战 贝叶斯定理&#xff08;Bayes Theorem&#xff09;是概率论中的一个重要公式&#xff0c;它提供了一种根据已有信息更新事件发生概率的方式。贝叶斯定理的核心思想是通过…...

学AI编程的Prompt工程,marscode

利用marscode做个创意应用 Datawhale-AI活动 首先把自己的创意告诉marscode&#xff0c;marscode会针对你的创意开始写代码。如果在把创意给marscode前有更好的梳理&#xff0c;会有更好的结果。 对于一个新开始的项目&#xff0c;只需要点击apply进行应用 由于ai的效果不稳定…...

python中的与时间相关的模块

python中的与时间相关的模块 1. time 模块2. datetime 模块3. calendar 模块4. timeit 模块5. pytz 模块6. dateutil 模块参考资料 1. time 模块 time 模块提供了时间相关的函数&#xff0c;主要用于测量时间间隔、获取当前时间、格式化时间等 主要功能 获取当前时间&#xff…...

Win11 任务栏Copilot图标消失?三步教你快速恢复

1. 为什么Win11任务栏的Copilot图标会消失&#xff1f; 最近有不少Win11用户反馈&#xff0c;原本好好显示在任务栏右侧的Copilot图标突然不见了。这个问题其实很常见&#xff0c;我自己的电脑也遇到过几次。经过多次测试和排查&#xff0c;我发现主要有以下几个原因会导致Copi…...

告别AT指令:在STM32上移植ESP8266 RTOS SDK,更稳定地接入米家智能插座

STM32与ESP8266 RTOS深度整合&#xff1a;构建高可靠米家智能插座开发框架 从AT指令到RTOS SDK的技术跃迁 在智能家居设备开发领域&#xff0c;ESP8266模块与STM32的组合堪称经典搭配。然而&#xff0c;大多数开发者仍停留在使用AT指令集进行基础通信的阶段&#xff0c;这种方案…...

手把手教你用STM32实现BLDC电机的SPWM控制(附代码调试心得)

STM32实战&#xff1a;无刷直流电机SPWM控制全解析与代码优化指南 从理论到实践&#xff1a;BLDC电机控制的核心逻辑 第一次接触无刷直流电机(BLDC)控制时&#xff0c;我被它优雅的工作原理所吸引——没有电刷的火花和磨损&#xff0c;却能实现高效的能量转换。在工业自动化、无…...

鸿蒙Next通讯录实战:用ArkUI 3.0手把手教你打造新建联系人页面(附完整代码)

鸿蒙Next通讯录实战&#xff1a;用ArkUI 3.0构建企业级新建联系人页面 在移动应用开发领域&#xff0c;通讯录功能一直是检验开发者UI构建和数据管理能力的经典场景。鸿蒙Next作为新一代分布式操作系统&#xff0c;其ArkUI 3.0框架为开发者提供了声明式UI编程范式&#xff0c;让…...

人工智能高质量数据集概述

人工智能高质量数据集&#xff0c;是指经过标准化采集、清洗、标注、质检、脱敏及结构化处理&#xff0c;能够直接用于人工智能模型开发、训练与优化&#xff0c;且能有效提升模型性能、保障模型泛化能力&#xff0c;具备高可用性、高一致性、高安全性和高适配性的结构化或非结…...

自动驾驶中的点云处理:Voxel-based与Pillar-based方法实战对比(附代码示例)

自动驾驶中的点云处理&#xff1a;Voxel-based与Pillar-based方法实战对比&#xff08;附代码示例&#xff09; 在自动驾驶技术快速发展的今天&#xff0c;点云数据处理已成为环境感知系统的核心环节。激光雷达扫描产生的海量三维点云数据&#xff0c;如何被高效、准确地转化为…...

GIL已死,GIL万岁?——2024大厂Python并发岗面试题库首发(含性能压测对比数据)

第一章&#xff1a;GIL已死&#xff0c;GIL万岁&#xff1f;——2024大厂Python并发岗面试题库首发&#xff08;含性能压测对比数据&#xff09;一道高频真题&#xff1a;为什么 asyncio.run() 启动的协程无法被 multiprocessing.Process 并发执行&#xff1f; 该问题直指 Pyth…...

Cadence Virtuoso IC618版图验证全流程:解决PEX提参map error的详细步骤

Cadence Virtuoso IC618版图验证全流程&#xff1a;解决PEX提参map error的详细步骤 从IC514迁移到IC618的过程就像给老房子换新地基——表面上看功能相似&#xff0c;但底层架构的升级带来了全新的操作逻辑和隐藏的"陷阱"。最近三个月&#xff0c;我团队完成了7个项…...

新手福音:通过快马平台生成带注释的nap自动化运维脚本快速入门

作为一个刚接触网络自动化运维的新手&#xff0c;第一次看到"深圳网络自动化运维nap"这个概念时&#xff0c;整个人都是懵的。各种专业术语、复杂的协议和库让我望而却步&#xff0c;直到发现了InsCode(快马)平台&#xff0c;才真正找到了入门的好方法。 为什么选择n…...

视频解析工具:高效获取无水印视频的技术实践与生态构建

视频解析工具&#xff1a;高效获取无水印视频的技术实践与生态构建 【免费下载链接】douyin-downloader 项目地址: https://gitcode.com/GitHub_Trending/do/douyin-downloader 在数字内容创作与研究领域&#xff0c;视频资源的高效获取已成为基础需求。然而平台访问限…...