博客地址: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的数据清洗 -- 缺失值(空值)的清洗的更多相关文章

  1. 数据分析03 /基于pandas的数据清洗、级联、合并

    数据分析03 /基于pandas的数据清洗.级联.合并 目录 数据分析03 /基于pandas的数据清洗.级联.合并 1. 处理丢失的数据 2. pandas处理空值操作 3. 数据清洗案例 4. 处 ...

  2. pandas 之 数据清洗-缺失值

    Abstract During the course fo doing data analysis and modeling, a significant amount of time is spen ...

  3. 【转载】使用pandas进行数据清洗

    使用pandas进行数据清洗 本文转载自:蓝鲸的网站分析笔记 原文链接:使用python进行数据清洗 目录: 数据表中的重复值 duplicated() drop_duplicated() 数据表中的 ...

  4. 基于pandas python的美团某商家的评论销售数据分析(可视化)

    基于pandas python的美团某商家的评论销售数据分析 第一篇 数据初步的统计 本文是该可视化系列的第二篇 第三篇 数据中的评论数据用于自然语言处理 导入相关库 from pyecharts i ...

  5. 用pandas进行数据清洗(二)(Data Analysis Pandas Data Munging/Wrangling)

    在<用pandas进行数据清洗(一)(Data Analysis Pandas Data Munging/Wrangling)>中,我们介绍了数据清洗经常用到的一些pandas命令. 接下 ...

  6. python – 基于pandas中的列中的值从DataFrame中选择行

    如何从基于pandas中某些列的值的DataFrame中选择行?在SQL中我将使用: select * from table where colume_name = some_value. 我试图看看 ...

  7. 数据分析04 /基于pandas的DateFrame进行股票分析、双均线策略制定

    数据分析04 /基于pandas的DateFrame进行股票分析.双均线策略制定 目录 数据分析04 /基于pandas的DateFrame进行股票分析.双均线策略制定 需求1:对茅台股票分析 需求2 ...

  8. 使用pandas进行数据清洗

    本文转载自:蓝鲸的网站分析笔记 原文链接:使用python进行数据清洗 目录: 数据表中的重复值 duplicated() drop_duplicated() 数据表中的空值/缺失值 isnull() ...

  9. 基于pandas python的美团某商家的评论销售(数据分析)

    数据初步的分析 本文是该系列的第一篇 数据清洗 数据初步的统计 第二篇 数据可视化 第三篇 数据中的评论数据用于自然语言处理 from pyecharts import Bar,Pie import ...

  10. 数据分析---用pandas进行数据清洗(Data Analysis Pandas Data Munging/Wrangling)

    这里利用ben的项目(https://github.com/ben519/DataWrangling/blob/master/Python/README.md),在此基础上增添了一些内容,来演示数据清 ...

随机推荐

  1. Qt音视频开发37-USB摄像头解码ffmpeg方案

    一.前言 用ffmpeg来处理USB摄像头,是前段时间研究视频监控ffmpeg内核的时候搞定的,既然ffmpeg这么牛逼的库可以解析各种音视频,我想处理个本地USB摄像头应该也不是什么难事,果真搜索也 ...

  2. Python设计模式(第2版)中文的pdf电子书

    Python设计模式(第2版)中文的pdf电子书下载地址:百度云盘,提取码:dmem

  3. [转]java中带图片按钮的大小设置

    在java部分需要用到图形界面编程的项目中,经常会使用图片设置对按钮进行美化,但是使用时会出现一个很麻烦的问题,那就是按钮的大小默认按照图片的大小来显示,这大大降低了界面的美观程度: 按照方法: JB ...

  4. pytorch模型降低计算成本和计算量

    下面是如何使用PyTorch降低计算成本和计算量的一些方法: 压缩模型:使用模型压缩技术,如剪枝.量化和哈希等方法,来减小模型的大小和复杂度,从而降低计算量和运行成本. 分布式训练:使用多台机器进行分 ...

  5. VEP注释文件下载网址

    Ensembl提供多个物种的注释文件: ftp://ftp.ensembl.org/pub/release-96/variation/VEP

  6. 为什么 .NET8线程池 容易引发线程饥饿

    一:背景 1. 讲故事 最近时间相对比较宽裕,多写点文章来充实社区吧,这篇文章主要还是来自于最近遇到的几例线程饥饿(Task.Result)引发的一系列的反思和总结,我觉得.NET8容易引发饥饿的原因 ...

  7. vue基础3

    1.watch 案例:百度搜索框 注释的是用watch实现的 然后这个我用的是oninput事件 a.深浅监听 浅监听 深监听(不建议使用) 2.过滤器 全局: Vue.fliter('过滤器名字', ...

  8. 敏捷开发:如何高效开每日站会(Daily Stand-up Meeting)

    介绍 在敏捷开发框架 Scrum 中,每日站会(Daily Stand-up Meeting,又叫 Daily Scrum)是 Sprint 迭代开发中,一个很重要的流程,一个重要的例会.在有限的时间 ...

  9. docker 使用centos镜像运行javaweb

    Docker 是 2014 年最为火爆的技术之一,几乎所有的程序员都听说过它.Docker 是一种"轻量级"容器技术,它几乎动摇了传统虚拟化技术的地位,现在国内外已经有越来越多的公 ...

  10. .net core2.2版本下载地址

    下载地址: https://download.visualstudio.microsoft.com/download/pr/279de74e-f7e3-426b-94d8-7f31d32a129c/e ...