数据导入与预处理-课程总结-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 统计计算与统计描述

常见的统计计算函数

相关文章
|
6月前
|
数据采集 Python
在Python中进行数据清洗和预处理查看数据概况
在Python中进行数据清洗和预处理查看数据概况
64 2
|
6月前
|
JSON 数据库 数据格式
数据导入与预处理-课程总结-04~06章
数据导入与预处理-课程总结-04~06章
|
数据挖掘
R语言之数据导出
R语言之数据导出
198 0
|
编解码 安全 Unix
数据导入与预处理-第4章-数据获取python读取pdf文档
数据导入与预处理-第4章-数据获取Python读取PDF文档 1 PDF简介 1.1 pdf是什么 2 Python操作PDF 2.1 pdfplumber库
数据导入与预处理-第4章-数据获取python读取pdf文档
|
数据采集 存储 自然语言处理
数据导入与预处理-课程总结-01~03章(上)
数据导入与预处理-课程总结-01~03章 第1章 数据预处理概述 1.1 基本概念 1.1.1 大数据项目开发流程
数据导入与预处理-课程总结-01~03章(上)
|
数据采集 大数据 索引
数据导入与预处理-课程总结-01~03章(中)
数据导入与预处理-课程总结-01~03章 第1章 数据预处理概述 1.1 基本概念 1.1.1 大数据项目开发流程
数据导入与预处理-课程总结-01~03章(中)
|
数据挖掘 大数据 索引
数据导入与预处理-第6章-03数据规约
数据导入与预处理-第6章-03数据规约 3 数据规约 3.1 数据规约概述(6.3.1 )
数据导入与预处理-第6章-03数据规约
|
SQL 存储 自然语言处理
数据导入与预处理-第6章-01数据集成
数据导入与预处理-第6章-01数据集成 1 数据集成概述 1.1 数据集成需要关注的问题 2 基于Pandas实现数据集成
数据导入与预处理-第6章-01数据集成
|
数据采集 数据挖掘 开发者
数据理解与预处理-3|学习笔记
快速学习数据理解与预处理-3
数据理解与预处理-3|学习笔记
|
机器学习/深度学习 算法 安全
数据理解与预处理-5|学习笔记
快速学习数据理解与预处理-5
数据理解与预处理-5|学习笔记