数据导入与预处理-课程总结-01~03章(下)

简介: 数据导入与预处理-课程总结-01~03章第1章 数据预处理概述1.1 基本概念1.1.1 大数据项目开发流程


4. 布尔型索引

# 布尔型索引
# 和Series原理相同
df = pd.DataFrame(np.random.rand(16).reshape(4,4)*100,
                   index = ['one','two','three','four'],
                   columns = ['a','b','c','d'])
print(df)
print('------')
b1 = df < 20
print(b1,type(b1))
print(df[b1])  # 也可以书写为 df[df < 20]
print('------')
# 不做索引则会对数据每个值进行判断
# 索引结果保留 所有数据:True返回原数据,False返回值为NaN
b2 = df['a'] > 50
print(b2,type(b2))
print(df[b2])  # 也可以书写为 df[df['a'] > 50]
print('------')
# 单列做判断
# 索引结果保留 单列判断为True的行数据,包括其他列
b3 = df[['a','b']] > 50
print(b3,type(b3))
print(df[b3])  # 也可以书写为 df[df[['a','b']] > 50]
print('------')
# 多列做判断
# 索引结果保留 所有数据:True返回原数据,False返回值为NaN
b4 = df.loc[['one','three']] < 50
print(b4,type(b4))
print(df[b4])  # 也可以书写为 df[df.loc[['one','three']] < 50]
print('------')
# 多行做判断
# 索引结果保留 所有数据:True返回原数据,False返回值为NaN

输出为:


3.2.4 DataFrame基本操作技巧

数据查看、转置 / 添加、修改、删除值 / 对齐 / 排序

1. 数据查看、转置

# 数据查看、转置
df = pd.DataFrame(np.random.rand(16).reshape(8,2)*100,
                   columns = ['a','b'])
print(df.head(2))
print(df.tail())
# .head()查看头部数据
# .tail()查看尾部数据
# 默认查看5条
print(df.T)
# .T 转置

2. 添加、修改、删除值

# 添加与修改
df = pd.DataFrame(np.random.rand(16).reshape(4,4)*100,
                   columns = ['a','b','c','d'])
# 新增列/行并赋值
df['e'] = 10
df.loc[4] = 20
# 索引后直接修改值
df['e'] = 20
df[['a','c']] = 100
# del语句 - 删除列
del df['a']
# drop()删除行,inplace=False → 删除后生成新的数据,不改变原数据
df.drop([1,2])
# drop()删除列,需要加上axis = 1,inplace=False → 删除后生成新的数据,不改变原数据
df.drop(['d'], axis = 1)

3. 排序

排序1 - 按值排序 .sort_values

pandas中可以使用sort_values()方法将Series、DataFrmae类对象按值的大小排序。

DataFrame.sort_values(by, axis=0, ascending=True, inplace=False,
   kind='quicksort', na_position='last', ignore_index=False)

by:表示根据指定的列索引名(axis=0或’index’)或行索引名(axis=1或’columns’)进行排序。

axis:表示轴编号(排序的方向),0代表按行排序,1代表按列排序。

ascending:表示是否以升序方式排序,默认为True。若设置为False,则表示按降序方式排序。

na_position:表示缺失值的显示位置,可以取值为’first’(首位)或’last’(末位)。


排序2 - 索引排序 .sort_index

pandas中提供了一个sort_index()方法,使用sort_index()方法可以让Series类对象DataFrame类对象按索引的大小进行排序。

sort_index(axis=0, level=None, ascending=True, inplace=False,
                  kind='quicksort', na_position='last', sort_remaining=True, 
                  ignore_index: bool = False)

axis:表示轴编号(排序的方向),0代表按行排序,1代表按列排序。

level:表示按哪个索引层级排序,默认为None。

ascending:表示是否以升序方式排序,默认为True。若设置为False,则表示按降序方式排序。

kind:表示排序算法,可以取值为’quicksort’、 'mergesort’或’heapsort’,默认为‘quicksort’。

3.2.5 Index索引对象

1.索引对象概述

Index类的常见子类,包括MultiIndex、Int64Index、DatetimeIndex等

掌握分层索引,可以通过多种方式熟练地创建分层索引。

在创建Series类对象或DataFrame类对象时,既可以使用自动生成的整数索引,也可以使用自定义的

标签索引。无论哪种形式的索引,都是一个Index类的对象。

Index是一个基类,它派生了许多子类。

2. 索引对象操作

设置索引

In [8]: 
info = pd.DataFrame([('William', 'C'), ('Smith', 'Java'), ('Parker', 'Python'), ('Phill', np.nan)], index=[1, 2, 3, 4], columns=('name', 'Language'))
info

输出为:

Out[8]: 
      name Language
1  William        C
2    Smith     Java
3   Parker   Python
4    Phill      NaN

set_index() 将已存在的列标签设置为 DataFrame 行索引。除了可以添加索引外,也可以替换已经存在的索引。比如您也可以把 Series 或者一个 DataFrme 设置成另一个 DataFrame 的索引。示例如下:

In [6]: 
import pandas as pd
import numpy as np
info = pd.DataFrame({'Name': ['Parker', 'Terry', 'Smith', 'William'],  'Year': [2011, 2009, 2014, 2010], 'Leaves': [10, 15, 9, 4]})
info.set_index('Name')

输出为:

Out[6]: 
         Year  Leaves
Name                 
Parker   2011      10
Terry    2009      15
Smith    2014       9
William  2010       4

重置索引

您可以使用 reset_index() 来恢复初始行索引,示例如下:



info = pd.DataFrame([('William', 'C'), ('Smith', 'Java'), ('Parker', 'Python'), ('Phill', np.nan)], index=[1, 2, 3, 4], columns=('name', 'Language'))
info

输出为:

Out[11]: 
      name Language
1  William        C
2    Smith     Java
3   Parker   Python
4    Phill      NaN
In [13]: info.reset_index()

输出为:

Out[13]: 
   index     name Language
0      1  William        C
1      2    Smith     Java
2      3   Parker   Python
3      4    Phill      NaN

3. 使用索引对象操作数据

使用单层索引访问数据

无论是创建Series类对象还是创建DataFrame类对象,根本目的在于对Series类对象或DataFrame类对象中的数据进行处理,但在处理数据之前,需要先访问Series类对象或DataFrame类对象中的数据。

pandas中可以使用[]、loc、iloc、at和iat这几种方式访问Series类对象和DataFrame类对象的数据。

使用[]访问数据

变量[索引]

需要说明的是,若变量的值是一个Series类对象,则会根据索引获取该对象中对应的单个数据;若变量的值是一个DataFrame类对象,在使用“[索引]”访问数据时会将索引视为列索引,进而获取该列索引对应的一列数据。

使用loc和iloc访问数据pandas中也可以使用loc和iloc访问数据。

变量.loc[索引]
变量.iloc[索引]

以上方式中,"loc[索引]"中的索引必须为自定义的标签索引,而"iloc[索引]"中的索引必须为自动生成的整数索引。需要说明的是,若变量是一个DataFrame类对象,它在使用"loc[索引]"或"iloc[索引]"访问数据时会将索引视为行索引,获取该索引对应的一行数据。


使用at和iat访问数据

pandas中还可以使用at和iat访问数据,与前两种方式相比,这种方式可以访问DataFrame类对象的单个数据。

变量.at[行索引, 列索引]   
变量.iat[行索引, 列索引]

以上方式中,"at[行索引, 列索引]"中的索引必须为自定义的标签索引,"iat[行索引, 列索引]"中的索引必须为自动生成的整数索引。

使用分层索引访问数据

掌握分层索引的使用方式,可以通过[]、loc和iloc访问Series类对象和DataFrame类对象的数据

pandas中除了可以通过简单的单层索引访问数据外,还可以通过复杂的分层索引访问数据。与单层索引相比,分层索引只适用于[]、loc和iloc,且用法大致相同。


使用[]访问数据

由于分层索引的索引层数比单层索引多,在使用[]方式访问数据时,需要根据不同的需求传入不同层

级的索引。

变量[第一层索引] 
变量[第一层索引][第二层索引]

以上方式中,使用

变量[第一层索引]

可以访问第一层索引嵌套的第二层索引及其对应的数据;

使用

变量[第一层索引][第二层索引]

可以访问第二层索引对应的数据。

使用loc和iloc访问数据

使用iloc和loc也可以访问具有分层索引的Series类对象或DataFrame类对象。

变量.loc[第一层索引]                   # 访问第一层索引对应的数据
变量.loc[第一层索引][第二层索引]    # 访问第二层索引对应的数据
变量.iloc[整数索引]       # 访问第二层索引对应的数据

3.3 统计计算与统计描述

常见的统计计算函数

相关文章
|
Python
Python分支结构多分支讲解
Python分支结构多分支讲解
503 0
|
人工智能 PyTorch 算法框架/工具
AI 容器镜像部署 Stable Diffusion
本文将基于阿里云 AMD 服务器和龙蜥 AI 容器服务,快速搭建出个人版文生图服务
|
消息中间件 缓存 监控
Kafka中的Controller(控制器)节点
Kafka中的Controller(控制器)节点
1450 0
Kafka中的Controller(控制器)节点
|
11月前
|
存储 机器学习/深度学习 数据可视化
数据集中存在大量的重复值,会对后续的数据分析和处理产生什么影响?
数据集中存在大量重复值可能会对后续的数据分析和处理产生多方面的负面影响
584 56
|
12月前
|
监控 Java Linux
Jetson 学习笔记(十二):CSI摄像头实现rtsp流的传输并对动态获取多路流进行探索
本文是关于如何在Jetson设备上使用CSI摄像头实现RTSP流传输的详细教程,包括安装依赖、编译gst-rtsp-server、测试、源代码介绍以及如何动态获取多路流的RTSP服务器。
829 2
Jetson 学习笔记(十二):CSI摄像头实现rtsp流的传输并对动态获取多路流进行探索
|
机器学习/深度学习 算法 TensorFlow
深度学习中的自编码器:从理论到实践
【8月更文挑战第29天】本文旨在揭示自编码器的神秘面纱,带领读者领略其在数据表示学习中的独特魅力。我们将从其数学原理出发,逐步深入到网络架构的搭建,最后通过代码示例实现一个简易的自编码器模型。无论是深度学习新手还是经验丰富的研究者,这篇文章都将为你提供新的视角和实用知识。
|
Java API 数据安全/隐私保护
Java中使用注解的最佳实践
Java中使用注解的最佳实践
|
机器学习/深度学习 人工智能 自然语言处理
AIGC技术革新:智能创造如何重塑艺术与设计行业
AIGC技术,人工智能生成内容,正引领艺术与设计行业的变革。借助深度学习和自然语言处理等技术,AIGC能自动生成文本、图像等内容,丰富创作手段并提供创新机会。在艺术领域,它模拟各种风格作品,助力高效创作;在设计领域,它根据用户需求生成设计方案,提升个性化选择。AIGC打破了传统界限,提高了创作效率,并满足了用户的个性化需求。未来,随着技术进步和应用场景拓展,AIGC将在虚拟现实等领域的结合中,为艺术与设计带来更沉浸式、交互式的体验,重塑行业未来。【6月更文挑战第4天】
1254 1
|
Kubernetes 关系型数据库 MySQL
nacos常见问题之客户端不发送心跳检测如何解决
Nacos是阿里云开源的服务发现和配置管理平台,用于构建动态微服务应用架构;本汇总针对Nacos在实际应用中用户常遇到的问题进行了归纳和解答,旨在帮助开发者和运维人员高效解决使用Nacos时的各类疑难杂症。
647 2
|
算法 搜索推荐
经典算法之折半插入排序(Binary Insertion Sort)
经典算法之折半插入排序(Binary Insertion Sort)
491 0