博客地址: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. WxPython跨平台开发框架之动态菜单的管理和功能权限的控制

    在一个业务管理系统中,如果我们需要实现权限控制功能,我们需要定义好对应的权限功能点,然后在前端界面中对界面元素的可用性和功能点进行绑定,这样就可以在后台动态分配权限进行动态控制了,一般来说,权限功能点 ...

  2. [LC623]在二叉树中增加一行

    题目描述 给定一个二叉树的根 root 和两个整数 val 和 depth ,在给定的深度 depth 处添加一个值为 val 的节点行. 注意,根节点 root 位于深度 1 . 加法规则如下: 给 ...

  3. 安装docker-compose v1

    1.首先要确保已经安装docker 2.下载docker-compose二进制文件,并移动到适当的目录 sudo curl -L "https://github.com/docker/com ...

  4. Solution -「AGC 039F」Min Product Sum

    \(\mathscr{Description}\)   Link.   对于所有 \(n\times m\) 的矩阵 \(A\), \(a_{ij}\in[1,k]\cap\mathbb N\), 求 ...

  5. Android性能测试(内存、cpu、fps、流量、GPU、电量)——adb篇

    adb 常用命令 获取连接设备号:adb devices     列出设备所有已安装的包名 (不需root权限) adb shell "pm list packages",可以加上 ...

  6. 凸n边形的对角线最多能将其内部分成几个区域

    https://math.stackexchange.com/questions/3384251/into-how-many-regions-do-the-sides-and-diagonals-of ...

  7. Golang sync.pool源码解析

    Golang sync.pool源码解析 - sync.pool - 是什么 - 怎么用 - demo - 真实世界的使用 - 源码解读-数据结构 - 源码解读-读写流程 - 写流程 - 读流程 - ...

  8. 独立看门狗IWDG

    一.简介     STM32F10xxx内置两个看门狗(独立看门狗是12位递减计数器,窗口看门狗是7位递减计数器),提供了更高的安全性.时间的精确性和使用的灵活性.两个看门狗设备(独立看门狗和窗口看门 ...

  9. Nodify学习 四:预先连接

    前置 预先连接 可以从连接器创建预先连接,并可以放置在ItemContainer或Connector上(如果AllowOnlyConnectors为false). 预先连接的Content可以使用Co ...

  10. Vue获取DOM,数据监听,组件,混合和插槽

    Vue获取DOM,数据监听,组件,混合和插槽 注:":" 是指令 "v-bind"的缩写,"@"是指令"v-on"的缩写 ...