基于pandas的数据清洗 -- 缺失值(空值)的清洗

基于,pandas,数据,清洗,缺失,空值 · 浏览次数 : 9

小编点评

**数据分析中需要用到的是浮点类型的空值而不是对象类型的原因:** * **数据分析中经常需要进行浮点运算,而浮点数类型比对象类型更易于处理。** * **对象类型可能存在类型转换问题,例如当我们用对象类型处理浮点数时,可能会引发错误。** * **浮点数类型可以参与各种数学运算,而对象类型只能参与基本运算。** **在数据分析中,如果原数据中的空值是 对象类型,那么 pandas 将无法对其进行操作。** 例如: ```python import pandas as pd # 创建包含对象类型的空值的列表 data = [[1, 2, None], [3, 4, 5], None, 7, 8]] # 创建 DataFrame 并添加数据 df = pd.DataFrame(data, columns=['A', 'B', 'C']) # 打印结果 print(df) ``` **输出:** ``` A B C 0 1 2 3 1 3 4 5 2 6 None 7 ``` **可以看到,数据中包含的第一个空值是对象类型,而其他两个空值是浮点类型。**

正文

博客地址:https://www.cnblogs.com/zylyehuo/

开发环境

  • anaconda
    • 集成环境:集成好了数据分析和机器学习中所需要的全部环境
    • 安装目录不可以有中文和特殊符号
  • jupyter
    • anaconda提供的一个基于浏览器的可视化开发工具

丢失数据的类型

  • 原始数据中会存在两种缺失值(空值)
    • None
    • np.nan(NaN)

两种丢失数据的区别

import pandas as pd
from pandas import DataFrame
import numpy as np
type(None)
NoneType
type(np.nan)
float

为什么在数据分析中需要用到的是浮点类型的空而不是对象类型?

  • 数据分析中会常常使用某些形式的运算来处理原始数据,如果原数数据中的空值为NAN的形式,则不会干扰或者中断运算。
  • NAN可以参与运算的
  • None是不可以参与运算
np.nan + 1
nan
None + 1
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-5-3fd8740bf8ab> in <module>
----> 1 None + 1

TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'

在pandas中如果遇到了None形式的空值则pandas会将其强转成NAN的形式。

df = DataFrame(data=np.random.randint(0,100,size=(7,5)))
df.iloc[2,3] = None
df.iloc[4,2] = np.nan
df.iloc[5,4] = None
df

pandas处理空值操作

  • isnull
  • notnull
  • any
  • all
  • dropna
  • fillna

方式1:对空值进行过滤(删除空所在的行数据)

  • isnull --> any
  • notnull --> all
df.isnull()

# 哪些行中有空值
# any(axis=1)检测哪些行中存有空值
df.isnull().any(axis=1)  # any会作用isnull返回结果的每一行
# true对应的行就是存在缺失数据的行
0    False
1    False
2     True
3    False
4     True
5     True
6    False
dtype: bool
df.notnull()

df.notnull().all(axis=1)
0     True
1     True
2    False
3     True
4    False
5    False
6     True
dtype: bool
# 将布尔值作为源数据的行索引
df.loc[df.notnull().all(axis=1)]

# 获取空对应的行数据
df.loc[df.isnull().any(axis=1)]
# 获取空对应行数据的行索引
indexs = df.loc[df.isnull().any(axis=1)].index
indexs
Int64Index([2, 4, 5], dtype='int64')
df.drop(labels=indexs,axis=0)

方式2:dropna 直接将缺失的行或者列进行删除

df.dropna(axis=0)

# 对缺失值进行覆盖 fillna
df.fillna(value=999)  # 使用指定值将源数据中所有的空值进行填充

# 使用空的近邻值进行填充
# method=ffill向前填充,bfill向后填充
df.fillna(axis=0,method='bfill')

dropna和fillna的选用

  • 什么时候用dropna什么时候用fillna?
    • 尽量使用dropna
    • 如果删除成本比较高,则使用fillna

方式3:使用空值对应列的均值进行空值填充

for col in df.columns:
    # 检测哪些列中存有空值
    if df[col].isnull().sum() > 0:  # 说明df[col]中存有空值
        mean_value = df[col].mean()
        df[col] = df[col].fillna(value=mean_value)
df

面试题

  • 数据说明:
    • 数据是1个冷库的温度数据,1-7对应7个温度采集设备,1分钟采集一次。
  • 数据处理目标:
    • 用1-4对应的4个必须设备,通过建立冷库的温度场关系模型,预估出5-7对应的数据。
    • 最后每个冷库中仅需放置4个设备,取代放置7个设备。
    • f(1-4) --> y(5-7)
  • 数据处理过程:
    • 1、原始数据中有丢帧现象,需要做预处理;
    • 2、matplotlib 绘图;
    • 3、建立逻辑回归模型。
  • 无标准答案,按个人理解操作即可。
  • 测试数据为testData.xlsx
data = pd.read_excel('./data/testData.xlsx').drop(labels=['none','none1'],axis=1)
data

data.shape
(1060, 8)
# 删除空对应的行数据
data.dropna(axis=0).shape
(927, 8)
# 填充
data.fillna(method='ffill',axis=0).fillna(method='bfill',axis=0)

与基于pandas的数据清洗 -- 缺失值(空值)的清洗相似的内容:

基于pandas的数据清洗 -- 缺失值(空值)的清洗

博客地址:https://www.cnblogs.com/zylyehuo/ 开发环境 anaconda 集成环境:集成好了数据分析和机器学习中所需要的全部环境 安装目录不可以有中文和特殊符号 jupyter anaconda提供的一个基于浏览器的可视化开发工具 丢失数据的类型 原始数据中会存在两种

基于pandas的数据清洗 -- 重复值的清洗

博客地址:https://www.cnblogs.com/zylyehuo/ 开发环境 anaconda 集成环境:集成好了数据分析和机器学习中所需要的全部环境 安装目录不可以有中文和特殊符号 jupyter anaconda提供的一个基于浏览器的可视化开发工具 df = DataFrame(dat

基于pandas的数据清洗 -- 异常值的清洗

博客地址:https://www.cnblogs.com/zylyehuo/ 开发环境 anaconda 集成环境:集成好了数据分析和机器学习中所需要的全部环境 安装目录不可以有中文和特殊符号 jupyter anaconda提供的一个基于浏览器的可视化开发工具 自定义一个1000行3列(A,B,C

【pandas基础】--概述

Pandas是一个开源的Python数据分析库。 它提供了快速,灵活和富有表现力的数据结构,旨在使数据清洗和分析变得简单而快速。 Pandas是基于NumPy数组构建的,因此它在许多NumPy函数上提供了直接的支持。它还提供了用于对表格数据进行操作的数据结构,例如Series和DataFrame。

【pandas基础】--数据修改

pandas 作为一种常用的数据分析工具,提供了广泛的数据修改方法。 既可以针对行或者列的数据进行修改,也可以对具体单个元素进行修改,还可以基于条件选择要修改的行或者列的数据。 1. 增加数据 1.1 增加行数据 pandas的DataFrame增加一行或者多行数据之前是使用append方法。 im

【pandas基础】--索引和轴

在`pandas`中,索引(`index`)是用于访问数据的关键。 它为数据提供了基于标签的访问能力,类似于字典,可以根据标签查找和访问数据。 而`pandas`的轴(`axis`)是指数据表中的一个维度,可以理解为表格中的行和列。 通过指定轴,我们可以对数据进行切片、筛选、聚合等操作。 下面简要介

pandas -- 处理非数值型数据 -- 数据分析三剑客(核心)

博客地址:https://www.cnblogs.com/zylyehuo/ 开发环境 anaconda 集成环境:集成好了数据分析和机器学习中所需要的全部环境 安装目录不可以有中文和特殊符号 jupyter anaconda提供的一个基于浏览器的可视化开发工具 为什么学习pandas numpy已

基于随机森林算法进行硬盘故障预测

摘要:本案例将带大家使用一份开源的S.M.A.R.T.数据集和机器学习中的随机森林算法,来训练一个硬盘故障预测模型,并测试效果。 本文分享自华为云社区《基于随机森林算法进行硬盘故障预测》,作者:HWCloudAI 。 实验目标 掌握使用机器学习方法训练模型的基本流程; 掌握使用pandas做数据分析

【pandas基础】--数据统计

在进行统计分析时,`pandas`提供了多种工具来帮助我们理解数据。 `pandas`提供了多个聚合函数,其中包括均值、标准差、最大值、最小值等等。 此外,`pandas`还可以进行基于列的统计分析,例如通过`groupby()`函数对数据进行聚合,并计算每组的统计分析结果。 除了基本的统计分析之外

pandas(进阶操作)-- 处理非数值型数据 -- 数据分析三剑客(核心)

博客地址:https://www.cnblogs.com/zylyehuo/ 开发环境 anaconda 集成环境:集成好了数据分析和机器学习中所需要的全部环境 安装目录不可以有中文和特殊符号 jupyter anaconda提供的一个基于浏览器的可视化开发工具 import numpy as np