处理丢失数据

有两种丢失数据:

  • None
  • np.nan(NaN)
import numpy as np

type(None)
NoneType
type(np.nan)
float

1. None

None是Python自带的,其类型为python object。因此,None不能参与到任何计算中。

object类型的运算要比int类型的运算慢得多

计算不同数据类型求和时间

%timeit np.arange(1e5,dtype=xxx).sum()

1E7
10000000.0
%timeit np.arange(1E6, dtype= int).sum()
4.85 ms ± 1.08 ms per loop (mean ± std. dev. of 7 runs, 100 loops each)
%timeit np.arange(1E6, dtype = float).sum()
7.33 ms ± 587 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
%timeit np.arange(1E6,dtype = object).sum()
118 ms ± 8.94 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

2. np.nan(NaN)

np.nan是浮点类型,能参与到计算中。但计算的结果总是NaN。

但可以使用np.nan*()函数来计算nan,此时视nan为0。

nd = np.array([10,20,30,np.nan,None])
#None 不能够参加到运算当中
nd.sum()
---------------------------------------------------------------------------

TypeError                                 Traceback (most recent call last)

<ipython-input-13-218f693fc17f> in <module>()
1 nd = np.array([10,20,30,np.nan,None])
----> 2 nd.sum() C:\anaconda\lib\site-packages\numpy\core\_methods.py in _sum(a, axis, dtype, out, keepdims)
30
31 def _sum(a, axis=None, dtype=None, out=None, keepdims=False):
---> 32 return umr_sum(a, axis, dtype, out, keepdims)
33
34 def _prod(a, axis=None, dtype=None, out=None, keepdims=False): TypeError: unsupported operand type(s) for +: 'float' and 'NoneType'
nd = np.array([10,20,30,np.nan])
nd
array([10., 20., 30., nan])
nd.sum()
nan
np.mean(nd)
nan
np.nanmean(nd)
20.0
np.nansum(nd)
60.0
np.nan
nan

3. pandas中的None与NaN

1) pandas中None与np.nan都视作np.nan

创建DataFrame

import pandas as pd
from pandas import Series,DataFrame
df = DataFrame([10,20,57,None,np.nan], index = list('abcde'), columns = ["Python"])
df

.dataframe tbody tr th:only-of-type {
vertical-align: middle;
}

.dataframe tbody tr th {
vertical-align: top;
} .dataframe thead th {
text-align: right;
}
Python
a 10.0
b 20.0
c 57.0
d NaN
e NaN
df.sum()
Python    87.0
dtype: float64
df = DataFrame([[10,20,57,None,np.nan],
[22,33,56,16,None],
[np.nan,1,2,3,4]], index = list("abc"), columns = ["Python","Java","物理","数学","H5"])
df

.dataframe tbody tr th:only-of-type {
vertical-align: middle;
}

.dataframe tbody tr th {
vertical-align: top;
} .dataframe thead th {
text-align: right;
}
Python Java 物理 数学 H5
a 10.0 20 57 NaN NaN
b 22.0 33 56 16.0 NaN
c NaN 1 2 3.0 4.0
df.sum(axis = 0)
Python     32.0
Java 54.0
物理 115.0
数学 19.0
H5 4.0
dtype: float64

使用DataFrame行索引与列索引修改DataFrame数据

df["Python"]["c"] = 12
C:\anaconda\lib\site-packages\ipykernel_launcher.py:1: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
"""Entry point for launching an IPython kernel.
df

.dataframe tbody tr th:only-of-type {
vertical-align: middle;
}

.dataframe tbody tr th {
vertical-align: top;
} .dataframe thead th {
text-align: right;
}
Python Java 物理 数学 H5
a 10.0 20 57 NaN NaN
b 22.0 33 56 16.0 NaN
c 12.0 1 2 3.0 4.0

2) pandas中None与np.nan的操作

df = DataFrame([[10,20,57,None,np.nan],
[22,33,56,16,None],
[np.nan,1,2,3,4]], index = list("abc"), columns = ["Python","Java","物理","数学","H5"])
df

.dataframe tbody tr th:only-of-type {
vertical-align: middle;
}

.dataframe tbody tr th {
vertical-align: top;
} .dataframe thead th {
text-align: right;
}
Python Java 物理 数学 H5
a 10.0 20 57 NaN NaN
b 22.0 33 56 16.0 NaN
c NaN 1 2 3.0 4.0
#下面讲的是一个重点!!!!
  • isnull()
  • notnull()
  • dropna(): 过滤丢失数据
  • fillna(): 填充丢失数据
df

.dataframe tbody tr th:only-of-type {
vertical-align: middle;
}

.dataframe tbody tr th {
vertical-align: top;
} .dataframe thead th {
text-align: right;
}
Python Java 物理 数学 H5
a 10.0 20 57 NaN NaN
b 22.0 33 56 16.0 NaN
c NaN 1 2 3.0 4.0
#DataFrame 的isnull这个函数返回值就是一个DataFrame
is_null = df.isnull()
is_null
#

.dataframe tbody tr th:only-of-type {
vertical-align: middle;
}

.dataframe tbody tr th {
vertical-align: top;
} .dataframe thead th {
text-align: right;
}
Python Java 物理 数学 H5
a False False False True True
b False False False False True
c True False False False False
#需求:查看哪一行有空值,举数据分析的例子的时候吗,会用这个方法
is_null = is_null.any(axis = 1)
is_null
a    True
b True
c True
dtype: bool
df2 = DataFrame([[10,20,57,90,28],[22,35,46,78,67],[21,34,23,77,66]],
index = list("efg"),columns = ["Python","Java","物理","数学","H5"] )
#没空值的数据
df2

.dataframe tbody tr th:only-of-type {
vertical-align: middle;
}

.dataframe tbody tr th {
vertical-align: top;
} .dataframe thead th {
text-align: right;
}
Python Java 物理 数学 H5
e 10 20 57 90 28
f 22 35 46 78 67
g 21 34 23 77 66
df3 = df.add(df2, fill_value = 0)
df3

.dataframe tbody tr th:only-of-type {
vertical-align: middle;
}

.dataframe tbody tr th {
vertical-align: top;
} .dataframe thead th {
text-align: right;
}
Python Java 物理 数学 H5
a 10.0 20.0 57.0 NaN NaN
b 22.0 33.0 56.0 16.0 NaN
c NaN 1.0 2.0 3.0 4.0
e 10.0 20.0 57.0 90.0 28.0
f 22.0 35.0 46.0 78.0 67.0
g 21.0 34.0 23.0 77.0 66.0
df3_isnull = df3.isnull()
df3_isnull = df3_isnull.any(axis = 1)
df3_isnull
a     True
b True
c True
e False
f False
g False
dtype: bool
df3[df3_isnull]
#过滤问题 过滤的是没有空值的,留下来的是带空值的!!!

.dataframe tbody tr th:only-of-type {
vertical-align: middle;
}

.dataframe tbody tr th {
vertical-align: top;
} .dataframe thead th {
text-align: right;
}
Python Java 物理 数学 H5
a 10.0 20.0 57.0 NaN NaN
b 22.0 33.0 56.0 16.0 NaN
c NaN 1.0 2.0 3.0 4.0
df

.dataframe tbody tr th:only-of-type {
vertical-align: middle;
}

.dataframe tbody tr th {
vertical-align: top;
} .dataframe thead th {
text-align: right;
}
Python Java 物理 数学 H5
a 10.0 20 57 NaN NaN
b 22.0 33 56 16.0 NaN
c NaN 1 2 3.0 4.0
df[is_null]

.dataframe tbody tr th:only-of-type {
vertical-align: middle;
}

.dataframe tbody tr th {
vertical-align: top;
} .dataframe thead th {
text-align: right;
}
Python Java 物理 数学 H5
a 10.0 20 57 NaN NaN
b 22.0 33 56 16.0 NaN
c NaN 1 2 3.0 4.0

(1)判断函数

  • isnull()
  • notnull()
df3

.dataframe tbody tr th:only-of-type {
vertical-align: middle;
}

.dataframe tbody tr th {
vertical-align: top;
} .dataframe thead th {
text-align: right;
}
Python Java 物理 数学 H5
a 10.0 20.0 57.0 NaN NaN
b 22.0 33.0 56.0 16.0 NaN
c NaN 1.0 2.0 3.0 4.0
e 10.0 20.0 57.0 90.0 28.0
f 22.0 35.0 46.0 78.0 67.0
g 21.0 34.0 23.0 77.0 66.0
df3_notnull = df3.notnull().all(axis = 1)
df3_notnull
a    False
b False
c False
e True
f True
g True
dtype: bool
df3[df3_notnull]
#过滤的是空值,留下来的是没有空值的情况

.dataframe tbody tr th:only-of-type {
vertical-align: middle;
}

.dataframe tbody tr th {
vertical-align: top;
} .dataframe thead th {
text-align: right;
}
Python Java 物理 数学 H5
e 10.0 20.0 57.0 90.0 28.0
f 22.0 35.0 46.0 78.0 67.0
g 21.0 34.0 23.0 77.0 66.0
#还可以通过条件来进行过滤
df3

.dataframe tbody tr th:only-of-type {
vertical-align: middle;
}

.dataframe tbody tr th {
vertical-align: top;
} .dataframe thead th {
text-align: right;
}
Python Java 物理 数学 H5
a 10.0 20.0 57.0 NaN NaN
b 22.0 33.0 56.0 16.0 NaN
c NaN 1.0 2.0 3.0 4.0
e 10.0 20.0 57.0 90.0 28.0
f 22.0 35.0 46.0 78.0 67.0
g 21.0 34.0 23.0 77.0 66.0
cond = (df3 >= 10).all(axis= 1)
cond
a    False
b False
c False
e True
f True
g True
dtype: bool
df3[cond]

.dataframe tbody tr th:only-of-type {
vertical-align: middle;
}

.dataframe tbody tr th {
vertical-align: top;
} .dataframe thead th {
text-align: right;
}
Python Java 物理 数学 H5
e 10.0 20.0 57.0 90.0 28.0
f 22.0 35.0 46.0 78.0 67.0
g 21.0 34.0 23.0 77.0 66.0

(2) 过滤函数

  • dropna()
df3

.dataframe tbody tr th:only-of-type {
vertical-align: middle;
}

.dataframe tbody tr th {
vertical-align: top;
} .dataframe thead th {
text-align: right;
}
Python Java 物理 数学 H5
a 10.0 20.0 57.0 NaN NaN
b 22.0 33.0 56.0 16.0 NaN
c NaN 1.0 2.0 3.0 4.0
e 10.0 20.0 57.0 90.0 28.0
f 22.0 35.0 46.0 78.0 67.0
g 21.0 34.0 23.0 77.0 66.0
df3.dropna()

.dataframe tbody tr th:only-of-type {
vertical-align: middle;
}

.dataframe tbody tr th {
vertical-align: top;
} .dataframe thead th {
text-align: right;
}
Python Java 物理 数学 H5
e 10.0 20.0 57.0 90.0 28.0
f 22.0 35.0 46.0 78.0 67.0
g 21.0 34.0 23.0 77.0 66.0
df3["H5"] = None
df3
#pandas 自身的bug 但是数据还是nan

.dataframe tbody tr th:only-of-type {
vertical-align: middle;
}

.dataframe tbody tr th {
vertical-align: top;
} .dataframe thead th {
text-align: right;
}
Python Java 物理 数学 H5
a 10.0 20.0 57.0 NaN None
b 22.0 33.0 56.0 16.0 None
c NaN 1.0 2.0 3.0 None
e 10.0 20.0 57.0 90.0 None
f 22.0 35.0 46.0 78.0 None
g 21.0 34.0 23.0 77.0 None
df3.dropna(axis = 1,how = "all")

.dataframe tbody tr th:only-of-type {
vertical-align: middle;
}

.dataframe tbody tr th {
vertical-align: top;
} .dataframe thead th {
text-align: right;
}
Python Java 物理 数学
a 10.0 20.0 57.0 NaN
b 22.0 33.0 56.0 16.0
c NaN 1.0 2.0 3.0
e 10.0 20.0 57.0 90.0
f 22.0 35.0 46.0 78.0
g 21.0 34.0 23.0 77.0

可以选择过滤的是行还是列(默认为行)

也可以选择过滤的方式 how = 'all'

(3) 填充函数 Series/DataFrame

  • fillna()
df3

.dataframe tbody tr th:only-of-type {
vertical-align: middle;
}

.dataframe tbody tr th {
vertical-align: top;
} .dataframe thead th {
text-align: right;
}
Python Java 物理 数学 H5
a 10.0 20.0 57.0 NaN None
b 22.0 33.0 56.0 16.0 None
c NaN 1.0 2.0 3.0 None
e 10.0 20.0 57.0 90.0 None
f 22.0 35.0 46.0 78.0 None
g 21.0 34.0 23.0 77.0 None
df3.fillna(-1)

.dataframe tbody tr th:only-of-type {
vertical-align: middle;
}

.dataframe tbody tr th {
vertical-align: top;
} .dataframe thead th {
text-align: right;
}
Python Java 物理 数学 H5
a 10.0 20.0 57.0 -1.0 -1
b 22.0 33.0 56.0 16.0 -1
c -1.0 1.0 2.0 3.0 -1
e 10.0 20.0 57.0 90.0 -1
f 22.0 35.0 46.0 78.0 -1
g 21.0 34.0 23.0 77.0 -1

可以选择前向填充还是后向填充

df3

.dataframe tbody tr th:only-of-type {
vertical-align: middle;
}

.dataframe tbody tr th {
vertical-align: top;
} .dataframe thead th {
text-align: right;
}
Python Java 物理 数学 H5
a 10.0 20.0 57.0 NaN None
b 22.0 33.0 56.0 16.0 None
c NaN 1.0 2.0 3.0 None
e 10.0 20.0 57.0 90.0 None
f 22.0 35.0 46.0 78.0 None
g 21.0 34.0 23.0 77.0 None
df3.fillna(method = "bfill")

.dataframe tbody tr th:only-of-type {
vertical-align: middle;
}

.dataframe tbody tr th {
vertical-align: top;
} .dataframe thead th {
text-align: right;
}
Python Java 物理 数学 H5
a 10.0 20.0 57.0 16.0 None
b 22.0 33.0 56.0 16.0 None
c 10.0 1.0 2.0 3.0 None
e 10.0 20.0 57.0 90.0 None
f 22.0 35.0 46.0 78.0 None
g 21.0 34.0 23.0 77.0 None
df3.fillna(method = "ffill")

.dataframe tbody tr th:only-of-type {
vertical-align: middle;
}

.dataframe tbody tr th {
vertical-align: top;
} .dataframe thead th {
text-align: right;
}
Python Java 物理 数学 H5
a 10.0 20.0 57.0 NaN None
b 22.0 33.0 56.0 16.0 None
c 22.0 1.0 2.0 3.0 None
e 10.0 20.0 57.0 90.0 None
f 22.0 35.0 46.0 78.0 None
g 21.0 34.0 23.0 77.0 None
#f  forward  向前
df3.fillna(method='ffill', axis = 1)

.dataframe tbody tr th:only-of-type {
vertical-align: middle;
}

.dataframe tbody tr th {
vertical-align: top;
} .dataframe thead th {
text-align: right;
}
Python Java 物理 数学 H5
a 10.0 20.0 57.0 57.0 57.0
b 22.0 33.0 56.0 16.0 16.0
c NaN 1.0 2.0 3.0 3.0
e 10.0 20.0 57.0 90.0 90.0
f 22.0 35.0 46.0 78.0 78.0
g 21.0 34.0 23.0 77.0 77.0
df3.fillna(method = "bfill",axis = 1)

对于DataFrame来说,还要选择填充的轴axis。记住,对于DataFrame来说:

  • axis=0:index/行
  • axis=1:columns/列

============================================

练习7:

  1. 简述None与NaN的区别

  2. 假设张三李四参加模拟考试,但张三因为突然想明白人生放弃了英语考试,因此记为None,请据此创建一个DataFrame,命名为ddd3

  3. 老师决定根据用数学的分数填充张三的英语成绩,如何实现?

    用李四的英语成绩填充张三的英语成绩?

============================================

(二)pandas处理丢失数据的更多相关文章

  1. Pandas 处理丢失数据

    处理丢失数据 import pandas as pd from pandas import Series, DataFrame import numpy as np 有两种丢失数据: 1. None ...

  2. pandas处理丢失数据-【老鱼学pandas】

    假设我们的数据集中有缺失值,该如何进行处理呢? 丢弃缺失值的行或列 首先我们定义了数据集的缺失值: import pandas as pd import numpy as np dates = pd. ...

  3. Pandas处理丢失数据

    1.创建含NaN的矩阵 >>> dates = pd.date_range(', periods=6) >>> df = pd.DataFrame(np.arang ...

  4. [数据清洗]- Pandas 清洗“脏”数据(二)

    概要 了解数据 分析数据问题 清洗数据 整合代码 了解数据 在处理任何数据之前,我们的第一任务是理解数据以及数据是干什么用的.我们尝试去理解数据的列/行.记录.数据格式.语义错误.缺失的条目以及错误的 ...

  5. [数据清洗]- Pandas 清洗“脏”数据(三)

    预览数据 这次我们使用 Artworks.csv ,我们选取 100 行数据来完成本次内容.具体步骤: 导入 Pandas 读取 csv 数据到 DataFrame(要确保数据已经下载到指定路径) D ...

  6. Python利用pandas处理Excel数据的应用

    Python利用pandas处理Excel数据的应用   最近迷上了高效处理数据的pandas,其实这个是用来做数据分析的,如果你是做大数据分析和测试的,那么这个是非常的有用的!!但是其实我们平时在做 ...

  7. 【python基础】利用pandas处理Excel数据

    参考:https://www.cnblogs.com/liulinghua90/p/9935642.html 一.安装第三方库xlrd和pandas 1:pandas依赖处理Excel的xlrd模块, ...

  8. Python3 Pandas的DataFrame数据的增、删、改、查

    Python3 Pandas的DataFrame数据的增.删.改.查 一.DataFrame数据准备 增.删.改.查的方法有很多很多种,这里只展示出常用的几种. 参数inplace默认为False,只 ...

  9. pandas.DataFrame——pd数据框的简单认识、存csv文件

    接着前天的豆瓣书单信息爬取,这一篇文章看一下利用pandas完成对数据的存储. 回想一下我们当时在最后得到了六个列表:img_urls, titles, ratings, authors, detai ...

随机推荐

  1. 如何向这些CA来申请数字证书呢?

    申请的过程大致是: 1.自己本地先生成一对密匙,然后拿着自己的公匙以及其他信息(比如说企业名称啊什么的)去CA申请数字证书. 2.CA在拿到这些信息后,会选择一种单向Hash算法(比如说常见的MD5) ...

  2. 探究:Adobe Premiere Pro CC 2018 导入SRT字幕显示不全问题

    问题:如果使用PR,大概率会遇到导入SRT格式的字幕文件后,PR里面显示的字幕不完整,字幕丢失的问题. 探究:字幕文件的内容正常,导入PR后字幕出现丢失. 查看字幕文件,并测试,发现如下图,如果出现字 ...

  3. 【Navicat】Navicat for MongoDBv15.0.6破解版(附破解教程)

    安装包下载链接:https://download.csdn.net/download/l1028386804/12519681 Navicat for MongoDB 15是一款功能十分强大的数据库管 ...

  4. GitHub 热点速览 Vol.24:程序员自我增值,优雅赚零花钱

    摘要:升职加薪,出任 CTO,迎娶白富美/高帅富,走向人生巅峰是很多人的梦想.在本期的热点速览中你将了解自由作者 Easy 如何优雅赚取零花钱的方法,以及定投改变命运 -- 让时间陪你慢慢变富.说到程 ...

  5. WEditor(元素定位工具)安装和定位界面元素

     1. 安装adb(安装方法——百度网盘(无邪)) 2. 安装python-uiautomator2 pip install --pre -U uiautomator2 3. 手机设备安装atx-ag ...

  6. 深度学习中环境配置的一些经验总结(conda 常用命令)

    前两个月参加了学校的国创项目,和一个外院的同学组队.课题是基于深度学习的新闻图片中网络暴力元素的检查. 6月末最后一门试考完,正式开始暑假,便有了大把时间搞这个国创项目(反正没有其他事干).两个组凑钱 ...

  7. <前端 js 实现 代码雨 >

    前端  js 实现 代码雨: <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...

  8. 一个非侵入的Go事务管理库——工作原理

    在上一篇文章"一个非侵入的Go事务管理库--如何使用"中,我讲述了如何使用事务库.有些读者可能读过"清晰架构(Clean Architecture)的Go微服务: 事物管 ...

  9. Python实现监测抖音在线时间,实时记录一个人全天的在线情况

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:小dull鸟 今天给大家分享一篇有趣的文章,灵感来自于前几天与室友的 ...

  10. bug和测试报告思维导图

    Bug定义: 1.不符合需求的 2.程序本身的报错 3.不符合用户使用习惯的 Bug生命周期: 当我们测试人员提交一个bug的时候,自始bug就有它的生命周期,从开始到结束, 把测试的过程和结果写成文 ...