Pandas学习笔记(四)

DataFrame对象

文章目录

  • DataFrame对象
      • 导入本文需要的包
      • DataFrame与Series的相似之处
        • 使用`read_csv`函数导入DataFrame
        • Series和DataFrame的共享与专有属性
        • Series和DataFrame的共有方法
      • 对DataFrame进行排序
        • 按照单列进行排序
        • 按照多列进行排序
        • 按照索引进行排序
        • 对列索引进行排序
      • 设置索引
      • 从DataFrame中选择列
        • 从DataFrame中选择单列
        • 从DataFrame中选择多列
      • 从DataFrame中选择行
        • 使用索引标签提取行
        • 按索引位置提取行
        • 从特征列中提取特征值
      • 对行或列进行重命名
      • 重置索引
      • 代码挑战
        • 解决方案

DataFrame是具有行和列的二维数据表,相比于Series,DataFrame可以有很多列。并且DataFrame很多操作与Series相似

导入本文需要的包

import pandas as pd
import numpy as np

通过字典创建DataFrame

city_data = {"City": ["New York City", "Paris", "Barcelona", "Rome"],"Country": ["United States", "France", "Spain", "Italy"],"Population": [8600000, 2141000, 5515000, 2873000]
}
cities = pd.DataFrame(city_data)
cities

DataFrame与Series的相似之处

使用read_csv函数导入DataFrame
nba = pd.read_csv("./pandas-in-action-master/chapter_04_the_dataframe_object/nba.csv",parse_dates=["Birthday"])
nba
Series和DataFrame的共享与专有属性

Series只有一列,所以其只有一个dtype属性。而DataFrame有很多

pd.Series([1, 2, 3]).dtype
nba.dtypes

注意Series是dtype,DataFrame是dtypes

查看列名:

nba.columns

查看维度:

nba.shape

计算数值总数:

nba.size

这样得到的事包含缺失值的数量,如果想要查看排出缺失值的总数,可以用下面这种方法

nba.count().sum()
Series和DataFrame的共有方法
nba.head(2)
nba.tail(n = 3)
nba.sample(3)
nba.max()
nba.min()
nba.nlargest(n = 4, columns = "Salary")
# 只对数字字段加和
nba.sum(numeric_only = True)
nba.mean(numeric_only = True)
nba.median(numeric_only = True)
nba.mode(numeric_only = True)
nba.std(numeric_only = True)

对DataFrame进行排序

按照单列进行排序
nba.sort_values("Name")
nba.sort_values(by = "Name")
nba.sort_values(by = "Name", ascending = False) # 降序
按照多列进行排序
nba.sort_values(by = ["Team", "Name"])
# 还可以指定每一列是升序还是降序
nba.sort_values(by = ["Team", "Name"], ascending = [True, False])
按照索引进行排序
# 在存储排序之后,我们还可以通过对索引排序来恢复
nba = nba.sort_values(by = ["Team", "Name"], ascending = [True, False])
nba
nba = nba.sort_index()
nba
对列索引进行排序
nba.sort_index(axis = "columns")
nba.sort_index(axis = 1)

设置索引

nba.set_index(keys = "Name")
nba.set_index("Name")
nba = nba.set_index("Name") # 覆盖

上面两种是相同的

从DataFrame中选择列

从DataFrame中选择单列
nba.Salary

这种方式返回的是对应的Series

还可以:

nba[("Salary")]

这种方法的优点是支持带空格的列名,如果列名带空格只能通过方括号来提取

从DataFrame中选择多列
nba[["Salary", 'Birthday']]

中括号里的顺序变了,输出的顺序也会变

nba[['Birthday', 'Salary']]

可以使用select_dtypes方法,根据数据类型选择列。该方法接受两个参数includeexclude。参数接收单个字符串或列表,表示Pandas应保留或丢弃的列类型。

nba.select_dtypes(include = "object")
nba.select_dtypes(exclude = ["object", "int"])

从DataFrame中选择行

使用索引标签提取行
nba.loc["LeBron James"]
nba.loc[["LeBron James", "Paul George"]]

同样的索引时的顺序,代表输出的顺序

还支持Python的列表切片语法

nba.sort_index().loc["Otto Porter" : "Patrick Beverley"]
nba.sort_index().loc["Zach Collins":]
nba.sort_index().loc[:"Al Horford"]

loc切片包括上限的值,但列表切片不包括上限的值

按索引位置提取行
nba.iloc[300]
nba.iloc[[100, 200, 300, 400]]
nba.iloc[400:404]
nba.iloc[:2]
nba.iloc[447:]
从特征列中提取特征值
nba.loc["Giannis Antetokounmpo", "Team"]
nba.loc["James Harden", ["Position", "Birthday"]]
nba.loc[["Russell Westbrook", "Anthony Davis"], ["Team", "Position"]]
nba.loc["Joel Embiid", "Position" : "Salary"]
nba.iloc[57, 3]

使用lociloc的时因为Pandas要先确定传入的数据类型,所以运行速度较慢。如果只需要提取单个值的时候,可以用at代替loc,用iat代替iloc,使代码的运行速度更快。其中at系列和loc系列的使用方法类似。同时at系列也可以用于Series

对行或列进行重命名

查看列名:

nba.columns

可以通过为该属性分配新名称来重命名DataFrame的任何或所有列

nba.columns = ["Team", "position", "Date of Birth", "Pay"]

还可以通过rename传入一个字典实现,其中字典的值是新的名称

nba = nba.rename(columns = {"Date of Birth": "Birthday"})

将上面代码中的columns换位index就为更改索引名称

重置索引

现在我想要将Team作为新的索引,但我直接通过set_index更改会导致Name列数据的丢失

nba.set_index("Team").head()

我们可以通过reset_index之前的索引替换为数字索引,并且那一列会被保留,再更换索引

nba.reset_index().set_index("Team").head()

代码挑战

nfl.csv 文件包含美国国家橄榄球联盟中与 NBA 相似的数据结构,包括球员的 Name、Team、Position、Birthday 和 Salary 信息。尝试回答如下问题:

  1. 如何导入 nfl.csv 文件,并将其 Birthday 列中的值转换为日期时间类型?
  2. 可以通过哪两种方式设置 DataFrame 索引来存储球员姓名?
  3. 如何计算这个数据集中每支球队的球员人数?
  4. 收入最高的 5 名球员是谁?
  5. 如何先按球队名称升序对数据集进行排序,然后按薪资降序对数据集进行排序?
  6. New York Jets 队年龄最大的球员是谁,他的生日是哪天?
解决方案
# 1
nfl = pd.read_csv("./pandas-in-action-master/chapter_04_the_dataframe_object/nfl.csv", parse_dates=["Birthday"])# 2
nfl = pd.read_csv("./pandas-in-action-master/chapter_04_the_dataframe_object/nfl.csv", parse_dates=["Birthday"], index_col = "Name")
nfl = pd.read_csv("./pandas-in-action-master/chapter_04_the_dataframe_object/nfl.csv", parse_dates=["Birthday"])
nfl = nfl.set_index("Name")# 3
nfl.Team.value_counts()# 4
nfl.sort_values(by = "Salary", ascending = False)# 5
nfl.sort_values(by = ["Team", "Salary"], ascending = [True, False])# 6
# 先将Team列设置为索引
nfl = nfl.reset_index().set_index("Team")
nfl.loc["New York Jets"].sort_values("Birthday").head(1)

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

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

相关文章

DA14585墨水屏学习(2)

一、user_svc2_wr_ind_handler函数 void user_svc2_wr_ind_handler(ke_msg_id_t const msgid,struct custs1_val_write_ind const *param,ke_task_id_t const dest_id,ke_task_id_t const src_id) {// sprintf(buf2,"HEX %d :",param->length);arch_printf("…

树莓派5+Ubuntu24.04 LTS串口通信 保姆级教程

【背景】 各位,除了树莓派4B之外,我又搞了个树莓派5, 装的也是Ubuntu24.04 LTS服务器版。装系统的方法跟树莓派4B一样,没什么好说的。装完了系统之后,我就想装个wiringPi来试试串口,却发现这个树莓派5的串口和树莓派4…

【QT】UDP通讯本地调试

qt已经写好了udp通讯代码,现在要进行测试。 1、终端输入ipconfig查看本机网卡的ipv4地址 2、 用udpBind函数,绑定到此ip和自定义的端口号。 3、 打开网络调试助手,自动检测到本机的ip地址,输入任意一个和程序里不一样的端口号。 …

在 Elasticsearch 中连接两个索引

作者:来自 Elastic Kofi Bartlett 解释如何使用 terms query 和 enrich processor 来连接 Elasticsearch 中的两个索引。 更多有关连接两个索引的查询,请参阅文章 “Elastic:开发者上手指南” 中的 “丰富数据及 lookup” 章节。 Elasticsea…

LabVIEW的PID参数自适应控制

在工业控制领域,PID 控制凭借结构简单、稳定性好、工作可靠等优点被广泛应用。然而,传统固定参数的 PID 控制在面对复杂多变的工况时,控制效果往往难以达到最优。基于 LabVIEW 实现 PID 控制根据情况选择参数(即参数自适应调整&am…

[redis进阶四]分布式系统之哨兵(2)

目录 一 利用docker搭建环境 板书: 一)准备⼯作: 板书: 解读docker配置文件: 1)安装docker和docker-compose 2) 停⽌之前的redis-server 3) 使⽤docker获取redis镜像 二)编排redis主从节点 板书:​编辑 1) 编写docker-compose.yml 2) 启动所有容器 3) 查看运⾏⽇志 …

spark-Schema 定义字段强类型和弱类型

在数据处理和存储中,Schema(模式)定义了数据的结构和字段属性,其中字段的强类型和弱类型是重要的概念,直接影响数据的验证、存储和处理方式。以下是详细解释: 1. 强类型(Strongly Typed&#x…

2024睿抗编程赛国赛-题解

2024睿抗编程赛国赛题解 RC-u1 大家一起查作弊 题目重述 我们需要从给定的多行字符串中提取出所有的关键词,并计算这些关键词的可疑分数总和、总长度以及关键词的数量。具体步骤如下: 关键词定义:由大写字母、小写字母、数字组成的字符串&a…

控制LED灯设备

本章分别使用C库和系统调用的文件操作方式控制开发板的LED灯,展示如何在应用层通过系统提供的设备文件控制相关硬件。 本章的示例代码目录为:base_code/linux_app/led/sys_class_leds。 9.1. LED子系统 在Linux系统中,绝大多数硬件设备都有…

SpringBoot学习(上) , SpringBoot项目的创建(IDEA2024版本)

目录 1. SpringBoot介绍 SpringBoot特点 2. SpringBoot入门 2.1 创建SpringBoot项目 Spring Initialize 第一步: 选择创建项目 第二步: 选择起步依赖 第三步: 查看启动类 2.2 springboot父项目 2.3 测试案例 2.3.1 数据库 2.3.2 生成代码 1. SpringBoot介绍 Spring B…

在 Ubuntu 中配置 Samba 实现「特定用户可写,其他用户只读」的共享目录

需求目标 所有认证用户可访问 Samba 共享目录 /path/to/home;**仅特定用户(如 developer)**拥有写权限;其他用户仅允许读取;禁止匿名访问。 配置步骤 1. 设置文件系统权限 将目录 /home3/guest 的所有权设为 develo…

ENSP-OSPF综合实验

AR4中通过ospf获取的其他区域路由信息,并且通过路由汇总后简化路由信息 实现全网通,以及单向重发布,以及通过缺省双向访问, 通过stub简化过滤四类五类lsa,简化ospf路由信息 通过nssa简化ospf信息 区域汇总简化R4路由信…

linux(centos)联网情况下部署

nginx部署 1.linux(centos)联网情况下部署 1.下载nginx所需依赖 # 安装开发工具组(若未安装) sudo yum groupinstall "Development Tools"# 安装 OpenSSL 开发包 sudo yum install openssl-devel# 安装 PCRE 开发包 sudo yum install pcre-…

LeetCode 1550.存在连续三个奇数的数组:遍历

【LetMeFly】1550.存在连续三个奇数的数组:遍历 力扣题目链接:https://leetcode.cn/problems/three-consecutive-odds/ 给你一个整数数组 arr,请你判断数组中是否存在连续三个元素都是奇数的情况:如果存在,请返回 tr…

Android Framework学习四:init进程实现

文章目录 init流程简介init源码执行顺序执行顺序 init进程的具体工作事项挂载文件系统设置 SELinuxSecondStageMaininit.rc启动zygote和serviceManager进程的重要性serviceManager工作原理 Framework学习之系列文章 init流程简介 下面图片主要围绕 Android 系统中init进程的运…

HTTP/3展望、我应该迁移到HTTP/2吗

1. HTTP/3展望 HTTP/3 基于 QUIC 协议,完全解决了“队头阻塞”问题,弱网环境下的表现会优于 HTTP/2;QUIC 是一个新的传输层协议,建立在 UDP 之上,实现了可靠传输;QUIC 内含了 TLS1.3,只能加密通…

【大模型面试每日一题】Day 15:流水线并行的Bubble问题及其缓解方法

【大模型面试每日一题】Day 15:流水线并行的Bubble问题及其缓解方法 📌 题目重现 🌟🌟 面试官:解释流水线并行(Pipeline Parallelism)的bubble问题及其缓解方法。 #mermaid-svg-Uz7WGsO8akW5F…

Windows环境下maven的安装与配置

1.检查JAVA_HOME环境变量 Maven是使用java开发的,所以必须知道当前系统环境中的JDK的安装目录。 搜索栏直接输入“cmd” 或者 WinR 输入cmd 在打开的终端窗口输入“echo %JAVA_HOME”,就可以看到jdk的位置了。 如果没有的话,请参考我的文章&a…

Kubernetes 集群部署应用

部署 Nginx 应用 命令行的方式 1. 创建 deployment 控制器的 pod # --imagenginx:这个会从 docker.io 中拉取,这个网站拉不下来 # kubectl create deployment mynginx --imagenginx# 使用国内镜像源拉取 kubectl create deployment mynginx --imaged…

如何使用依赖注入来实现依赖倒置原则?

依赖注入(Dependency Injection, DI)是实现依赖倒置原则(DIP)的具体技术手段,它通过将依赖对象的创建和管理交给外部容器,从而实现高层模块与低层模块的解耦。下面从原理、实现方式、框架应用及最佳实践四个方面详细解析: 一、依赖倒置原则(DIP)的核心思想 高层模块不…