第2关:Pandas缺失值类型

第2关:Pandas缺失值类型,第1张

任务描述

本关任务:根据所学知识完成右侧选择题。

相关知识

本关卡主要介绍Pandas自带的几个处理缺失值的工具的用法,该系列Pandas实训的缺失值主要有三种形式:nullNaNNA

选择处理缺失值的方法

一般情况下可以分为两种:一种方法是通过一个覆盖全局的掩码表示缺失值,另一种方法是用一个**标签值(sentinel value)**表示缺失值。

  • 掩码方法中掩码可能是一个与原数组维度相同的完整布尔类型数组,也可能是用一个比特(01)表示有缺失值的局部状态;

  • 标签方法中,标签值可能是具体的数据(例如用-9999表示缺失的整数),也可能是些极少出现的形式。

Pandas缺失值

综合考虑各种方法的优缺点,Pandas最终选择用标签方法表示缺失值,包括两种Python原有的缺失值:浮点数据类型的NaN值,以及 PythonNone对象。

  • NonePython对象类型的缺失值
    Pandas可以使用的第一种缺失值标签是None,它是一个Python单体对象,由于None是一个Python对象,所以不能作为任何NumPy / Pandas数组类型的缺失值,只能用于'object'数组类型(即由 Python对象构成的数组)。

     
      
    1. np.array([1, None, 3, 4])
    2. Out: array([1, None, 3, 4], dtype=object)
  • NaN:数值类型的缺失值
    另一种缺失值的标签是NaN(全称Not a Number),是一种按照IEEE浮点数标准设计、在任何系统中都兼容的特殊浮点数:

     
      
    1. vals2 = np.array([1, np.nan, 3, 4])
    2. vals2.dtype
    3. Out: dtype('float64')
  • *注意:**NumPy会为这个数组选择一个原生浮点类型,这意味着和之前的 object类型数组不同,这个数组会被编译成C代码从而实现快速 *** 作。你可以把NaN看作是一个数据类病毒——它会将与它接触过的数据同化。**无论和NaN进行何种 *** 作,最终结果都是NaN**:

     
      
    1. 1 + np.nan
    2. 0 * np.nan #这两个的结果都为nan

    虽然这些累计 *** 作的结果定义是合理的(即不会抛出异常),但是并非总是有效的:

     
      
    1. vals2 = np.array([1, np.nan, 3, 4])
    2. vals2.sum(), vals2.min(), vals2.max()
    3. Out:(nan, nan, nan)

    NumPy也提供了一些特殊的累计函数,它们可以忽略缺失值的影响:

     
      
    1. np.nansum(vals2), np.nanmin(vals2), np.nanmax(vals2)
    2. Out: (8.0, 1.0, 4.0)

谨记,NaN是一种特殊的浮点数,不是整数、字符串以及其他数据类型。

  • PandasNaNNone的差异
    虽然NaNNone各有各的用处,但是Pandas把它们看成是可以等价交换的:
     
      
    1. pd.Series([1, np.nan, 2, None])
    2. Out:
    3. 0 1.0
    4. 1 NaN
    5. 2 2.0
    6. 3 NaN
    7. dtype: float64
    Pandas会将没有标签值的数据类型自动转换为NA。例如我们将整形数组中的一个值设置为np.nan时,这个值就会强制转换成浮点数缺失值NA,下表表示Pandas对不同类型缺失值的转换规则:
类型缺失值转换规则NA标签值
floating 浮点型无变化np.nan
object 对象类型无变化np.nan或None
integer 整数类型强制转换为 float64np.nan
boolean 布尔类型强制转换为 objectnp.nan或None

编程要求

本关无编程任务,要求完成右侧代码编辑区内相应的选择题。

测试说明

平台会对你的选择题答案结果进行测试,对比你的答案与实际正确的答案,只有所有答案全部正确才能进入下一关。

 DE

  • 1、

    根据相关知识,计算1 + np.nan1 + Nonenp.nan + None的结果。

    A、

    'TypeError'、'TypeError'、'TypeError'

    B、

    nan1 、'TypeError'

    C、

    'TypeError'、'TypeError'、'nan'

    D、

    nan 、'TypeError'、'TypeError'

    E、

    nan 、'1'、'nan'

  • 2、

    假设a = [1 ,2 ,None,4]data1 = pd.Series(a)data2 = pd.Series(np.array(a))data1data2的结果分别是什么?

    A、

    data1:
    0 1.0
    1 2.0
    2 NaN
    3 4.0
    dtype: object
    data2:
    0 1
    1 2
    2 None
    3 4
    dtype: object

    B、

    data1:
    0 1.0
    1 2.0
    2 None
    3 4.0
    dtype: float64
    data2:
    0 1
    1 2
    2 None
    3 4
    dtype: object

    C、

    data1:
    0 1.0
    1 2.0
    2 NaN
    3 4.0
    dtype: float64
    data2:
    0 1.0
    1 2.0
    2 NaN
    3 4.0
    dtype: float64

    D、

    data1:
    0 1
    1 2
    2 NaN
    3 4
    dtype: float64
    data2:
    0 1
    1 2
    2 None
    3 4
    dtype: object

    E、

    data1:
    0 1.0
    1 2.0
    2 NaN
    3 4.0
    dtype: float64
    data2:
    0 1
    1 2
    2 None
    3 4
    dtype: object

    F、

    data1:
    0 1.0
    1 2.0
    2 NaN
    3 4.0
    dtype: float64
    data2:
    0 1.0
    1 2.0
    2 None
    3 4.0
    dtype: float64

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/943821.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-18
下一篇 2022-05-18

发表评论

登录后才能评论

评论列表(0条)

保存