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

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 队年龄最大的球员是谁,他的生日是哪天?
解决方案

http://www.xdnf.cn/news/5283.html

相关文章:

  • 嵌入式硬件篇---UART
  • 外网访问内网海康威视监控视频的方案:WebRTC + Coturn 搭建
  • Python OpenCV性能优化与部署实战指南
  • python 实现文件批量重命名
  • “frame stacking”---帮助强化学习稳定提升和收敛技巧
  • Nipype 简单使用教程
  • 5 从众效应
  • Spring Boot 集成 Flink CDC 实现 MySQL 到 Kafka 实时同步
  • RabbitMQ--进阶篇
  • React+Springboot项目部署ESC服务器
  • 三维空间中的组织行为映射:MATLAB 数据插值可视化技术
  • 【网络】:传输层协议 —— UDP、TCP协议
  • 兔子队列?RabbitMQ详解(1)
  • 数字化转型-4A架构之技术架构
  • Mac下Robotframework + Python3环境搭建
  • 《智能网联汽车 自动驾驶系统设计运行条件》 GB/T 45312-2025——解读
  • 无锁秒杀系统设计:基于Java的高效实现
  • 补补表面粗糙度的相关知识(一)
  • leetcode 15. 三数之和
  • Java 原生异步编程与Spring 异步编程 详解
  • 比亚迪全栈自研生态的底层逻辑
  • MySQL 索引(二)
  • 服务器mysql连接我碰到的错误
  • 高斯过程回归(GPR)原理的通俗解释
  • Spring循环依赖问题
  • 【DLF】基于语言的多模态情感分析
  • 邮件群发中如何确保图片加载速度
  • Qt开发经验 --- 避坑指南(12)
  • vue配置代理解决前端跨域的问题
  • python环境搭建和pycharm的安装配置以及使用face_recognition与cv2