python缺失值类型与分析_Pandas中缺失值的相关概念与处理方法总结

本文总结了Pandas中缺失值的概念、检测方法和处理策略,包括isna、notna等检测手段,以及np.nan、None、NaT等缺失值类型。介绍了Nullable类型和NA符号的引入,以及如何通过convert_dtypes方法转换数据类型。最后,提到了处理缺失值的思路和资源。
摘要由CSDN通过智能技术生成

Pandas中缺失值的相关概念与处理方法总结

摘要:本篇总结了Pandas中缺失值的相关概念、原理及处理方法,旨在帮助学习者快速搭建知识框架、更好地理解各类缺失值的含义,因而对于一些具体操作并未详细演示。请配合Datewhale社区的Joyful Pandas教材或其他Pandas教材练习相关函数的具体操作,效果更佳。发现-分析-处理三个步骤。

一、发现缺失值

1、isna和notna方法

2、isnull和notnull方法

两种方法结果相同。

例:

#返回数据框列缺失个数和比例的信息(将DF替换为数据框名即可)

num_missing = np.sum(DF[DF.columns].isnull()).sort_values(ascending=False)

pct_missing = np.mean(DF[DF.columns].isnull()).sort_values(ascending=False)

missing = pd.DataFrame({'num_missing' : num_missing,

'pct_missing' : pct_missing})

missing

找出缺失值之后,可以进行缺失值探索分析,如计算列缺失情况、行缺失情况等并做一些可视化的分析。

如果某行或者列缺失数据过多,包含信息很少,可以直接删除此实例或者特征。否则,就要进行填充或者插补等进一步处理。

二、 Pandas中的三种缺失符号

1、np.nan(最常见),在pandas中显示为NaN

Pandas 里处理缺失值的方式延续了 NumPy 程序包的方式,并没有为浮点数据类型提供内置的 NA 作为缺失值。Pandas选择用标签方法表示缺失值,包括两种 Python 原有的缺失值:浮点数据类型的NaN值,以及Python的None对象。

NaN(全称 Not a Number,不是一个数字),是一种按照 IEEE 浮点数标准设计、在任何系统中都兼容的***特殊浮点数***。在Numpy中可以把 NaN 看作是一个数据类‘’病毒‘’——它会将与它接触过的数据同化,无论和 NaN 进行何种操作(加减乘除等各种聚合函数操作),最终结果都是NaN;而在Python中进行类似聚合运算会自动忽略缺失值带来的影响。

9ee0f2e0df076397cecce25740234eee.png

注意:

在所有的表格读取后,无论列是存放什么类型的数据,默认的缺失值全为np.nan类型

(1)numpy中的类型为浮点,由此导致数据集读入时,即使原来是整数的列,只要有缺失值就会变为浮点型。

(2)对于布尔类型的列表,如果是np.nan填充,那么它的值会自动变为True而不是False。

总结:

当数据中存在缺失时,数据类型有以下转变:

整型型转为浮点;

字符型转为object类型(‘O’);

浮点型类型不变。

2、None(仅用于 ‘object’ 数据)

它是一个 Python 单体对象,经常在代码中表示缺失值。由于 None 是一个 Python 对象,所以不能作为任何 NumPy / Pandas 数组类型的缺失值,只能用于 ‘object’ 数组类型(即由 Python 对象构成的数组)。当NumPy / Pandas中数据含有None且不自己指定数据类型时,数据类型会被判定为dtype=object,表示NumPy / Pandas认为由于这个数组是Python 对象构成的,因此将其类型判断为 object。

只有当传入object类型是保持不动,几乎可以认为,除非人工命名None,它基本不会自动出现在Pandas中。

在bool数据中代表False。

3、NaT(仅用于时间序列数据)

NaT是针对时间序列的缺失值,是Pandas的内置类型,可以完全看做时序版本的np.nan,与自己不等,且使用equals是也会被跳过。

在bool数据中代表True。

三、新的Nullable类型与NA符号

1、为什么要引入新的Nullable类型和NA符号?

NA是Pandas在1.0新版本中引入的重大改变,其目的就是为了(在若干版本后)解决之前出现的混乱局面,统一缺失值处理方法

“The goal of pd.NA is provide a “missing” indicator that can be used consistently across data types (instead of np.nan, None or pd.NaT depending on the data type).”——User Guide for Pandas v-1.0

官方鼓励用户使用新的数据类型和缺失类型pd.NA。

引入pd.NA相当于为各种缺失值类型的“统一度量衡”。我们知道,在数据分析和建模的过程中,缺失值往往需要通过填充或者插补等方式处理掉。因而不管缺失值来源于什么类型的数据,其‘缺失’的含义都是相同的,实在没有必要“给一个人起三个外号”。统一"NA"可能是pandas的发展趋势。

熟悉R语言的朋友肯定对NA这个符号不会陌生。在R语言中,缺失值用 NA (表示Not Available)表示,空值用 NULL 表示。NA表示“占了个坑,只是不放东西”,在计算向量长度时会被计算在内;而NULL表示空一物——“压根连坑都没有”,甚至不会被计算长度。

与NA同时被引入Pandas的还有“string”等数据类型,弥补了Pandas缺乏专门字符型数据类型的遗憾。

Pandas中的很多元素都吸收了R语言中的精华并继续发扬,比如其最重要的数据结构DataFrame就来自于R语言。基于python面向对象的特性、pandas统一化的语法结构和全面集成的处理数据和分析功能(大一统),个人认为与R的基本数据处理相比,pandas的易学性、易用性更友好。如果粗暴点理解,可以把Pandas看成建立在Python平台上的R,它和Numpy一起为Python注入数据分析的基因,构成Python数据科学的基石,而后就是在此基础上的“包治百病”。

2、Nullable基本类型

(1)Nullable整形

对于该种类型而言,它与原来标记int上的符号区别在于首字母大写:‘Int’。

当序列使用最新的‘Int’数据类型后,无论将其中的数据替换为np.nan、None、pd.NaT任何一种,其在序列中的符号均被统一为“NA”并且序列数据类型不变,仍为“Int”。

(2)Nullable布尔

对于该种类型而言,作用与上面的类似,数据表现仍为“NA”,数据类型记号为“boolean”。

需要注意的是,含有pd.NA的布尔列表在1.0.2之前的版本作为索引时会报错,这是一个之前的bug,现已经修复。

(3)string类型

之前pandas支持的的基本数据类型中不含字符型数据。当用pandas读进的数据含有字符型数据时,其序列会被标记为“Object”类型,表示数据来自于python对象,这其实带来了一些模糊和不便。

此次推出string数据类型是1.0的一大创新,目的之一就是为了区分开原本含糊不清的object类型。

string类型返回的是Nullable类型,object则会根据缺失类型和数据类型而改变。

它本质上也属于Nullable类型,因为并不会因为含有缺失而改变类型。

3、NA特性

与Numpy中的NaN一样,具有“病毒属性”,可以进行逻辑计算,但不能用于各种聚合函数(算术运算和比较运算)(返回NA)。

但有两个特例:

pd.NA ** 0 = 1

1 ** pd.NA = 1

4、如何将数据转换为Nullable?-- convert_dtypes方法

例:

pd.read_csv('data.csv').convert_dtypes()

3088c950dbcc0e344ff9c7fdb4d4abcc.png

四、处理缺失值

这里给出一张思维导图以抛砖引玉,具体的各种函数用法请查阅图书或直接搜索。

9c1704c8161351da021a53489f9b3c12.png

了解更多pandas插值,请戳这里:

https://pandas.pydata.org/pandas-docs/version/1.0.0/reference/api/pandas.DataFrame.interpolate.html#pandas.DataFrame.interpolate

参考文献:

Datawhale社区Joyful Pandas教程;

《Python数据科学》:人民邮电出版社

原文链接:https://blog.csdn.net/weixin_45494886/article/details/106933431

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值