Python—关于Pandas缺失值问题(国内唯一)
获取文中的
CSV
文件用于代码编程以及文章首发地址,请点击下方超链接
在本文中,我们将使用Python
的Pandas
库逐步完成许多不同的数据清理任务。具体而言,我们将重点关注可能是最大的数据清理任务,即 缺少值。
缺失值的来源
在深入研究代码之前,了解丢失数据的来源很重要。这是数据丢失的一些典型原因:
- 用户忘记填写字段。
- 从旧版数据库手动传输时,数据丢失。
- 发生编程错误。
- 用户选择不填写字段。
其中一些来源只是简单的随机错误。在其他时候,可能会有更深层的原因导致数据丢失。
准备工作
在开始清理数据集之前,最好先大致了解一下数据。
- 有哪些功能?
- 预期的类型是什么(
int,float,string,boolean
)? - 是否有明显的缺失数据(熊猫可以检测到的值)?
- 是否还有其他类型的丢失数据不太明显(无法通过Pandas轻松检测到)?
了说明我的意思,让我们开始研究示例。
我们要使用的数据是非常小的房地产数据集。获取CSV
文件。你可以单击此处获取,以便可以进行编码。
快速浏览一下数据:
快速了解数据的一种好方法是查看前几行。在Pandas
中,你要编写以下代码:
# Importing libraries
import pandas as pd
import numpy as np
# Read csv file into a pandas dataframe
df = pd.read_csv("property data.csv")
# Take a look at the first few rows
print df.head()
Out:
ST_NUM ST_NAME OWN_OCCUPIED NUM_BEDROOMS
0 104.0 PUTNAM Y 3.0
1 197.0 LEXINGTON N 3.0
2 NaN LEXINGTON N 3.0
3 201.0 BERKELEY NaN 1.0
4 203.0 BERKELEY Y 3.0
我知道我说过我们将使用Pandas
,但是可以看到我也使用了Numpy
。稍后我们将使用它来重命名一些缺失的值。
导入库后,我们将csv
文件读取到Pandas
数据框中。
使用该方法,我们可以轻松看到前几行。(使用.head()
方法)
从列名称中推断出以下字符组非常容易:
ST_NUM
: 街道号码ST_NAME
: 街道名称OWN_OCCUPIED
:住所所有人是否被占用NUM_BEDROOMS
:卧室数
我们还可以进行设置,获取的数据类型是啥?
ST_NUM
:float或int…某种数字类型ST_NAME
: 细绳OWN_OCCUPIED
:字符串…Y(“是”)或N(“否”)NUM_BEDROOMS
:float或int,数字类型
标准缺失值
“标准缺失值”是什么意思?这些是Pandas
可以检测到的缺失值。
回到我们的原始数据集,让我们看一下“ ST_NUM
”列。
第三列中有一个空单元格。在第七行中,有一个“ NA
”值。
显然,这些都是缺失值。让我们看看Pandas
如何处理这些问题
# 查看ST_NUM列
print df['ST_NUM']
print df['ST_NUM'].isnull()
# 查看ST_NUM列
Out:
0 104.0
1 197.0
2 NaN
3 201.0
4 203.0
5 207.0
6 NaN
7 213.0
8 215.0
Out:
0 False
1 False
2 True
3 False
4 False
5 False
6 True
7 False
8 False
看一下该列,我们可以看到Pandas
在空白处填充了“ NA
”。使用该方法,我们可以确认缺失值和“ NA
”都被识别为缺失值。两个布尔响应均为。isnull()
和True
这是一个简单的示例,但强调了一个重点。Pandas
会将空单元格和“ NA
”类型都识别为缺失值。 下面,我将介绍一些Pandas
无法识别的类型。
非标准缺失值
有时可能是缺少具有不同格式的值的情况。
让我们看一下“Number of Bedrooms
”一栏,了解我的意思。
在此列中,有四个缺失值。
- n/a
- NA
- —
- na
从上面中,我们知道Pandas
会将“ NA
”识别为缺失值,但其他的情况呢?让我们来看看。
# 看NUM_BEDROOMS这一栏
print df['NUM_BEDROOMS']
print df['NUM_BEDROOMS'].isnull()
Out:
0 3
1 3
2 n/a
3 1
4 3
5 NaN
6 2
7 --
8 na
Out:
0 False
1 False
2 False
3 False
4 False
5 True
6 False
7 False
8 False
就像以前一样,Pandas
认为“ NA
”是缺失的价值。不幸的是,其他类型未被识别。
如果有多个用户手动输入数据,则这是一个常见问题。也许我喜欢使用“ n / a
”,但是其他人喜欢使用“ na
”。
检测这些各种格式的一种简单方法是将它们放在列表中。然后,当我们导入数据时,Pandas
会立即识别出它们。这是我们将如何执行此操作的示例。
# 列出缺失的值类型
missing_values = ["n/a", "na", "--"]
df = pd.read_csv("property data.csv", na_values = missing_values)
现在,让我们再看一下该栏,看看会发生什么。
# 看NUM_BEDROOMS这一栏
print df['NUM_BEDROOMS']
print df['NUM_BEDROOMS'].isnull()
Out:
0 3.0
1 3.0
2 NaN
3 1.0
4 3.0
5 NaN
6 2.0
7 NaN
8 NaN
Out:
0 False
1 False
2 True
3 False
4 False
5 True
6 False
7 True
8 True
下面中,我们将介绍一种更复杂但很常见的缺失值类型。
意外的缺失值
到目前为止,我们已经看到了标准缺失值和非标准缺失值。如果我们出现意外类型怎么办?
例如,如果我们的功能应该是字符串,但是有数字类型,那么从技术上讲,这也是一个缺失值。
让我们看一下“Owner Occupied
**”一栏,看看我在说什么。
从前面的示例中,我们知道Pandas
将检测到第7行中的空单元格为缺失值。让我们用一些代码进行确认。
# 查看OWN_OCCUPIED列
print df['OWN_OCCUPIED']
print df['OWN_OCCUPIED'].isnull()
# 查看OWN_OCCUPIED列
Out:
0 Y
1 N
2 N
3 12
4 Y
5 Y
6 NaN
7 Y
8 Y
Out:
0 False
1 False
2 False
3 False
4 False
5 False
6 True
7 False
8 False
在第四行中,数字为12。Owner Occupied
的响应显然应该是字符串(Y或N)
,因此此数字类型应为缺失值。
这个示例稍微复杂一点,因此我们需要考虑一种策略来检测这些类型的缺失值。有很多不同的方法,但是这是我要通过这种方法工作的方式。
- 遍历OWN_OCCUPIED列
- 尝试将条目转换为整数
- 如果条目可以更改为整数,请输入缺失值
- 如果数字不能是整数,我们知道它是一个字符串,所以继续
看一下代码,然后我将对其进行详细介绍
# 检测数据
cnt=0
for row in df['OWN_OCCUPIED']:
try:
int(row)
df.loc[cnt, 'OWN_OCCUPIED']=np.nan
except ValueError:
pass
cnt+=1
在代码中,我们循环浏览“所有者已占用”列中的每个条目。要尝试将条目更改为整数,我们使用。int(row)
如果可以将值更改为整数,则可以使用Numpy's
将条目更改为缺少的值。np.nan
另一方面,如果不能将其更改为整数,我们pass
将继续。
您会注意到我使用try
和except ValueError
。这称为异常处理,我们使用它来处理错误。
如果我们尝试将一个条目更改为一个整数并且无法更改,则将ValueError返回a
,并且代码将停止。为了解决这个问题,我们使用异常处理来识别这些错误,并继续进行下去。
代码的另一个重要部分是.loc
方法。这是用于修改现有条目的首选Pandas方法。有关此的更多信息,请查看Pandas
文档。
现在,我们已经研究了检测缺失值的不同方法,下面将概述和替换它们。
总结缺失值
清除缺失的值后,我们可能要对它们进行汇总。例如,我们可能要查看每个功能的缺失值总数。
# Total missing values for each feature
print df.isnull().sum()
Out:
ST_NUM 2
ST_NAME 0
OWN_OCCUPIED 2
NUM_BEDROOMS 4
在更多的时候,我们可能需要进行快速检查,以查看是否根本缺少任何值。
# Any missing values?
print df.isnull().values.any()
Out:
True
我们可能还希望获得缺失值的总数。
# Total number of missing values
print df.isnull().sum().sum()
Out:
8
在上面,我们总结了缺失值的数量,让我们看一下如何进行一些简单的替换。
更换
通常,您必须弄清楚如何处理缺失值。
有时,您只是想删除这些行,而其他时候,您将替换它们。
正如我之前提到的,这不应该掉以轻心。我们将介绍一些基本的推论。
# 用一个数字替换缺失的值
df['ST_NUM'].fillna(125, inplace=True)
如果进行基于位置的插补。
# 基于位置的更换
df.loc[2,'ST_NUM'] = 125
替换缺失值的一种非常常见的方法是使用中位数。
# 取代使用中位数
median = df['NUM_BEDROOMS'].median()
df['NUM_BEDROOMS'].fillna(median, inplace=True)
Python—关于Pandas缺失值问题(国内唯一)的更多相关文章
- python之pandas用法大全
python之pandas用法大全 更新时间:2018年03月13日 15:02:28 投稿:wdc 我要评论 本文讲解了python的pandas基本用法,大家可以参考下 一.生成数据表1.首先导入 ...
- Python之Pandas中Series、DataFrame
Python之Pandas中Series.DataFrame实践 1. pandas的数据结构Series 1.1 Series是一种类似于一维数组的对象,它由一组数据(各种NumPy数据类型)以及一 ...
- Python 的 pandas 实践
Python 的 pandas 实践: # !/usr/bin/env python # encoding: utf-8 __author__ = 'Administrator' import pan ...
- Python之Pandas中Series、DataFrame实践
Python之Pandas中Series.DataFrame实践 1. pandas的数据结构Series 1.1 Series是一种类似于一维数组的对象,它由一组数据(各种NumPy数据类型)以及一 ...
- Python:pandas(二)——pandas函数
Python:pandas(一) 这一章翻译总结自:pandas官方文档--General functions 空值:pd.NaT.np.nan //判断是否为空 if a is np.nan: .. ...
- Python利用pandas处理Excel数据的应用
Python利用pandas处理Excel数据的应用 最近迷上了高效处理数据的pandas,其实这个是用来做数据分析的,如果你是做大数据分析和测试的,那么这个是非常的有用的!!但是其实我们平时在做 ...
- Python数据分析--Pandas知识点(三)
本文主要是总结学习pandas过程中用到的函数和方法, 在此记录, 防止遗忘. Python数据分析--Pandas知识点(一) Python数据分析--Pandas知识点(二) 下面将是在知识点一, ...
- 基于 Python 和 Pandas 的数据分析(4) --- 建立数据集
这一节我想对使用 Python 和 Pandas 的数据分析做一些扩展. 假设我们是亿万富翁, 我们会想要多元化地进行投资, 比如股票, 分红, 金融市场等, 那么现在我们要聚焦房地产市场, 做一些这 ...
- 基于 Python 和 Pandas 的数据分析(2) --- Pandas 基础
在这个用 Python 和 Pandas 实现数据分析的教程中, 我们将明确一些 Pandas 基础知识. 加载到 Pandas Dataframe 的数据形式可以很多, 但是通常需要能形成行和列的数 ...
随机推荐
- iPadOS 14 memoji 无法使用 bug
iPadOS 14 memoji 无法使用 bug iPadOS 14 bug refs 如何在 iPhone 和 iPad Pro 上使用动话表情 https://support.apple.com ...
- 前端监控平台 & 架构
前端监控平台 & 架构 1px 透明的 gif 字节小, 43 bytes 支持跨域, 兼容场景多,零配置 https://en.wikipedia.org/wiki/GIF demo htt ...
- The State of JavaScript 2019
The State of JavaScript 2019 https://stateofjs.com/ https://survey.stateofjs.com/ https://2018.state ...
- js bese64转化为blob使用FormData上传
原文 工作示例 <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...
- hadoop环境搭建:高可用
目录 1.硬件配置 2.软件版本 3.准备工作 3.1.配置网络环境 3.2.安装JDK 3.3.安装ZOOKEEPER 4.安装Hadoop 5.启动 6.问题 7.配置文件 1.硬件配置 采用3台 ...
- Mysql训练:where后不可以进行聚合函数的判断,而having可以进行聚合函数的判断
力扣题目:查找重复的电子邮箱 编写一个 SQL 查询,查找 Person 表中所有重复的电子邮箱. +----+---------+ | Id | Email | +----+---------+ | ...
- Java多线程并发编程/锁的理解
一.前言 最近项目遇到多线程并发的情景(并发抢单&恢复库存并行),代码在正常情况下运行没有什么问题,在高并发压测下会出现:库存超发/总库存与sku库存对不上等各种问题. 在运用了 限流/加锁等 ...
- centos7.5+nginx+php急速配置
centos7.5+nginx+php急速配置 centosnginxphp 更新系统以及添加源 yum update yum -y install epel-release 安装php以及配置 yu ...
- Centos7修改Docker默认存储位置
一.前言 Centos7安装docker之后,默认的镜像及容器存储路径为/var/lib/docker,可以使用命令docker info查看. 但是该路径默认使用的是系统盘的存储,如果挂载了数据盘, ...
- MySql-Day-01
MySql 能够理解数据库的概念 能够安装MySQL数据库 能够启动,关闭及登录MySQL 能够使用SQL语句操作数据库 能够使用SQL语句操作表结构 能够使用SQL语句进行数据的添加修改和删除的操作 ...