任务描述
本关任务:根据所学知识完成右侧选择题。
相关知识
本关卡主要介绍Pandas
自带的几个处理缺失值的工具的用法,该系列Pandas
实训的缺失值主要有三种形式:null
、NaN
或NA
。
选择处理缺失值的方法
一般情况下可以分为两种:一种方法是通过一个覆盖全局的掩码表示缺失值,另一种方法是用一个**标签值(sentinel value)
**表示缺失值。
-
掩码方法中掩码可能是一个与原数组维度相同的完整布尔类型数组,也可能是用一个比特(
0
或1
)表示有缺失值的局部状态; -
标签方法中,标签值可能是具体的数据(例如用
-9999
表示缺失的整数),也可能是些极少出现的形式。
Pandas缺失值
综合考虑各种方法的优缺点,Pandas
最终选择用标签方法表示缺失值,包括两种Python
原有的缺失值:浮点数据类型的NaN
值,以及 Python
的None
对象。
-
None
:Python
对象类型的缺失值Pandas
可以使用的第一种缺失值标签是None
,它是一个Python
单体对象,由于None
是一个Python
对象,所以不能作为任何NumPy / Pandas
数组类型的缺失值,只能用于'object'
数组类型(即由Python
对象构成的数组)。np.array([1, None, 3, 4])
Out: array([1, None, 3, 4], dtype=object)
-
NaN
:数值类型的缺失值
另一种缺失值的标签是NaN
(全称Not a Number
),是一种按照IEEE
浮点数标准设计、在任何系统中都兼容的特殊浮点数:vals2 = np.array([1, np.nan, 3, 4])
vals2.dtype
Out: dtype('float64')
-
*注意:**
NumPy
会为这个数组选择一个原生浮点类型,这意味着和之前的object
类型数组不同,这个数组会被编译成C
代码从而实现快速 *** 作。你可以把NaN
看作是一个数据类病毒——它会将与它接触过的数据同化。**无论和NaN
进行何种 *** 作,最终结果都是NaN
**:1 + np.nan
0 * np.nan #这两个的结果都为nan
虽然这些累计 *** 作的结果定义是合理的(即不会抛出异常),但是并非总是有效的:
vals2 = np.array([1, np.nan, 3, 4])
vals2.sum(), vals2.min(), vals2.max()
Out:(nan, nan, nan)
NumPy
也提供了一些特殊的累计函数,它们可以忽略缺失值的影响:np.nansum(vals2), np.nanmin(vals2), np.nanmax(vals2)
Out: (8.0, 1.0, 4.0)
谨记,
NaN
是一种特殊的浮点数,不是整数、字符串以及其他数据类型。
Pandas
中NaN
与None
的差异
虽然NaN
与None
各有各的用处,但是Pandas
把它们看成是可以等价交换的:pd.Series([1, np.nan, 2, None])
Out:
0 1.0
1 NaN
2 2.0
3 NaN
dtype: float64
Pandas
会将没有标签值的数据类型自动转换为NA
。例如我们将整形数组中的一个值设置为np.nan
时,这个值就会强制转换成浮点数缺失值NA
,下表表示Pandas
对不同类型缺失值的转换规则:
类型 | 缺失值转换规则 | NA标签值 |
---|---|---|
floating 浮点型 | 无变化 | np.nan |
object 对象类型 | 无变化 | np.nan或None |
integer 整数类型 | 强制转换为 float64 | np.nan |
boolean 布尔类型 | 强制转换为 object | np.nan或None |
编程要求
本关无编程任务,要求完成右侧代码编辑区内相应的选择题。
测试说明
平台会对你的选择题答案结果进行测试,对比你的答案与实际正确的答案,只有所有答案全部正确才能进入下一关。
DE
-
1、
根据相关知识,计算
A、1 + np.nan
、1 + None
、np.nan + None
的结果。'TypeError'、'TypeError'、'TypeError'
B、
C、nan
、1
、'TypeError''TypeError'、'TypeError'、'nan'
D、
E、nan
、'TypeError'、'TypeError'nan
、'1'、'nan' -
2、
假设
A、a = [1 ,2 ,None,4]
,data1 = pd.Series(a)
,data2 = pd.Series(np.array(a))
,data1
和data2
的结果分别是什么?data1:
B、
0 1.0
1 2.0
2 NaN
3 4.0
dtype: object
data2:
0 1
1 2
2 None
3 4
dtype: objectdata1:
C、
0 1.0
1 2.0
2 None
3 4.0
dtype: float64
data2:
0 1
1 2
2 None
3 4
dtype: objectdata1:
D、
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: float64data1:
E、
0 1
1 2
2 NaN
3 4
dtype: float64
data2:
0 1
1 2
2 None
3 4
dtype: objectdata1:
F、
0 1.0
1 2.0
2 NaN
3 4.0
dtype: float64
data2:
0 1
1 2
2 None
3 4
dtype: objectdata1:
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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)