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

假设我们的数据集中有缺失值,该如何进行处理呢?

丢弃缺失值的行或列

首先我们定义了数据集的缺失值:

import pandas as pd
import numpy as np
dates = pd.date_range("2017-01-08", periods=6)
data = pd.DataFrame(np.arange(24).reshape(6, 4), index=dates, columns=["A", "B", "C", "D"])

data.iloc[0, 1] = np.nan
data.iloc[1, 2] = np.nan

print("data:")
print(data)

这里缺失值用np.nan来设置,输出为:

data:
             A     B     C   D
2017-01-08   0   NaN   2.0   3
2017-01-09   4   5.0   NaN   7
2017-01-10   8   9.0  10.0  11
2017-01-11  12  13.0  14.0  15
2017-01-12  16  17.0  18.0  19
2017-01-13  20  21.0  22.0  23

丢弃缺失值数据

可以使用dropna函数把拥有缺失值数据的行或列进行丢弃。

我们这里以丢弃掉拥有缺失值行作为例子:

import pandas as pd
import numpy as np
dates = pd.date_range("2017-01-08", periods=6)
data = pd.DataFrame(np.arange(24).reshape(6, 4), index=dates, columns=["A", "B", "C", "D"])

data.iloc[0, 1] = np.nan
data.iloc[1, 2] = np.nan

print("data:")
print(data)

print("处理结果:")
print(data.dropna(axis=0))

输出为:

data:
             A     B     C   D
2017-01-08   0   NaN   2.0   3
2017-01-09   4   5.0   NaN   7
2017-01-10   8   9.0  10.0  11
2017-01-11  12  13.0  14.0  15
2017-01-12  16  17.0  18.0  19
2017-01-13  20  21.0  22.0  23
处理结果:
             A     B     C   D
2017-01-10   8   9.0  10.0  11
2017-01-11  12  13.0  14.0  15
2017-01-12  16  17.0  18.0  19
2017-01-13  20  21.0  22.0  23

这样把拥有NaN的2017-01-08和2017-01-09行给丢弃掉了。

dropna所拥有的参数有:

axis:0=按行进行删除,1=按列进行删除

how:‘all‘=则丢掉全为NaN的行,‘any‘=丢弃只要此行中出现一个NaN的字段就丢弃

把缺失值替换成其它值

在处理缺失值时,我们也可以把缺失值替换成其它值,具体是通过使用fillna函数来实现的。

比如,我们想把缺失值设置成-1:

import pandas as pd
import numpy as np
dates = pd.date_range("2017-01-08", periods=6)
data = pd.DataFrame(np.arange(24).reshape(6, 4), index=dates, columns=["A", "B", "C", "D"])

data.iloc[0, 1] = np.nan
data.iloc[1, 2] = np.nan

print("data:")
print(data)

ret = data.fillna(-1)
print("处理结果:")
print(ret)

输出为:

data:
             A     B     C   D
2017-01-08   0   NaN   2.0   3
2017-01-09   4   5.0   NaN   7
2017-01-10   8   9.0  10.0  11
2017-01-11  12  13.0  14.0  15
2017-01-12  16  17.0  18.0  19
2017-01-13  20  21.0  22.0  23
处理结果:
             A     B     C   D
2017-01-08   0  -1.0   2.0   3
2017-01-09   4   5.0  -1.0   7
2017-01-10   8   9.0  10.0  11
2017-01-11  12  13.0  14.0  15
2017-01-12  16  17.0  18.0  19
2017-01-13  20  21.0  22.0  23

检查是否存在缺失数据

isnull()函数用来检查是否存在缺失值,如果存在缺失值,则对应位置就会显示True:

import pandas as pd
import numpy as np
dates = pd.date_range("2017-01-08", periods=6)
data = pd.DataFrame(np.arange(24).reshape(6, 4), index=dates, columns=["A", "B", "C", "D"])

data.iloc[0, 1] = np.nan
data.iloc[1, 2] = np.nan

print("data:")
print(data)

ret = data.isnull()
print("处理结果:")
print(ret)

输出为:

data:
             A     B     C   D
2017-01-08   0   NaN   2.0   3
2017-01-09   4   5.0   NaN   7
2017-01-10   8   9.0  10.0  11
2017-01-11  12  13.0  14.0  15
2017-01-12  16  17.0  18.0  19
2017-01-13  20  21.0  22.0  23
处理结果:
                A      B      C      D
2017-01-08  False   True  False  False
2017-01-09  False  False   True  False
2017-01-10  False  False  False  False
2017-01-11  False  False  False  False
2017-01-12  False  False  False  False
2017-01-13  False  False  False  False

如果我们想要知道整个的数据中是否存在缺失值,例子如下:

import pandas as pd
import numpy as np
dates = pd.date_range("2017-01-08", periods=6)
data = pd.DataFrame(np.arange(24).reshape(6, 4), index=dates, columns=["A", "B", "C", "D"])

data.iloc[0, 1] = np.nan
data.iloc[1, 2] = np.nan

print("data:")
print(data)

ret = np.any(data.isnull() == True)

print("处理结果:")
print(ret)

输出为:

data:
             A     B     C   D
2017-01-08   0   NaN   2.0   3
2017-01-09   4   5.0   NaN   7
2017-01-10   8   9.0  10.0  11
2017-01-11  12  13.0  14.0  15
2017-01-12  16  17.0  18.0  19
2017-01-13  20  21.0  22.0  23
处理结果:
True
时间: 2024-07-29 23:55:57

pandas处理丢失数据-【老鱼学pandas】的相关文章

pandas基本介绍-【老鱼学pandas】

前面我们学习了numpy,现在我们来学习一下pandas. Python Data Analysis Library 或 pandas 主要用于处理类似excel一样的数据格式,其中有表头.数据序列号以及实际的数据,而numpy就仅仅包含了实际的数据. 安装 直接输入: pip3 install pandas 最基本用法 import pandas as pd s = pd.Series([1, 2, 5, 6]) print(s) 输出: 0 1 1 2 2 5 3 6 dtype: int6

pandas设置值-【老鱼学pandas】

本节主要讲述如何根据上篇博客中选择出相应的数据之后,对其中的数据进行修改. 对某个值进行修改 例如,我们想对数据集中第2行第2列的数据进行修改: import pandas as pd import numpy as np dates = pd.date_range("2017-01-08", periods=6) data = pd.DataFrame(np.arange(24).reshape(6, 4), index=dates, columns=["A",

为何学习matplotlib-【老鱼学matplotlib】

这次老鱼开始学习matplotlib了. 在上个pandas最后一篇博文中,我们已经看到了用matplotlib进行绘图的功能,这次更加系统性地多学习一下关于matplotlib的功能. 在matlab中,其拥有非常强大的显示图表的功能. 在python中,就提供了一个类似matlab软件中的画图库matplotlib,其基本上是模仿matlab中的画图函数. 官网中介绍的显示图表的例子见:http://matplotlib.org/gallery/index.html 要使用,就必须先进行安装

Pandas处理丢失数据

1.创建含NaN的矩阵 >>> dates = pd.date_range('20130101', periods=6) >>> df = pd.DataFrame(np.arange(24).reshape((6,4)),index=dates, columns=['A','B','C','D']) >>> df.iloc[0,1] = np.nan >>> df.iloc[1,2] = np.nan >>> pr

matplotlib坐标轴设置-【老鱼学matplotlib】

我们可以对坐标轴进行设置,设置坐标轴的范围,设置坐标轴上的文字描述等. 基本用法 例如: import numpy as np import pandas as pd import matplotlib.pyplot as plt # 生成x轴上的数据:从-3到3,总共有50个点 x = np.linspace(-1, 1, 50) # 定义一个线性方程 y1 = 2 * x + 1 # 定义一个二次方程 y2 = x ** 2 # 设置x轴的取值范围为:-1到2 plt.xlim(-1, 2)

matplotlib柱状图-【老鱼学matplotlib】

柱状图在平常的图表中是非常常用的图,本节我们来看下如何来显示柱状图. 代码为: import numpy as np import pandas as pd import matplotlib.pyplot as plt # 柱子的数量 n = 12 # 生成X轴上的坐标位置 X = np.arange(n) # 生成Y轴上的值 Y = np.random.rand(n) plt.bar(X, Y) # 生成柱状图上的标注值 for x,y in zip(X, Y): # 在(x, y+0.01

sklearn交叉验证2-【老鱼学sklearn】

过拟合 过拟合相当于一个人只会读书,却不知如何利用知识进行变通. 相当于他把考试题目背得滚瓜烂熟,但一旦环境稍微有些变化,就死得很惨. 从图形上看,类似下图的最右图: 从数学公式上来看,这个曲线应该是阶数太高的函数,因为一般任意的曲线都能由高阶函数来拟合,它拟合得太好了,因此丧失了泛化的能力. 用Learning curve 检视过拟合 首先加载digits数据集,其包含的是手写体的数字,从0到9: # 加载数据 digits = load_digits() X = digits.data y

sklearn数据库-【老鱼学sklearn】

在做机器学习时需要有数据进行训练,幸好sklearn提供了很多已经标注好的数据集供我们进行训练. 本节就来看看sklearn提供了哪些可供训练的数据集. 这些数据位于datasets中,网址为:http://scikit-learn.org/stable/modules/classes.html#module-sklearn.datasets 房价数据 加载波士顿房价数据,可以用于线性回归用: sklearn.datasets.load_boston:http://scikit-learn.or

sklearn交叉验证-【老鱼学sklearn】

交叉验证(Cross validation),有时亦称循环估计, 是一种统计学上将数据样本切割成较小子集的实用方法.于是可以先在一个子集上做分析, 而其它子集则用来做后续对此分析的确认及验证. 一开始的子集被称为训练集.而其它的子集则被称为验证集或测试集.交叉验证是一种评估统计分析.机器学习算法对独立于训练数据的数据集的泛化能力(generalize). 我们以分类花的例子来看下: # 加载iris数据集 from sklearn.datasets import load_iris from s