购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

4.6 缺失值处理

4.6.1 缺失值判断

缺失数据(missing data)在数据分析应用中很常见。Pandas使用浮点值NaN(Not a Number)表示浮点和非浮点数组中的缺失数据,Python内置的None值和NumPy的浮点类型“np.nan”都会被当作Pandas的空值“NaN”处理。Pandas中可以通过isnull()判断各个单元格是否为空,如代码清单4-13所示。

代码清单4-13 使用isnull()处理空值示例

代码运行结果如下:

以phone.csv文件(图4-1)为例,该CSV文件存在数据缺失、数据错误的情况。Pandas读取CSV文件后,会前将它包含的3种异常数据n/a、NaN和NA自动当作异常数据NaN来处理,见代码清单4-14。

图4-1 phone.csv文件

代码清单4-14 CSV文件中的空值处理示例

代码运行结果如下:

从上面例子可以看到,Pandas把n/a、NaN和NA当作空值数据自动识别,值为“/”和“-”的单元格不是空数据,但也不符合分析要求。这种情况下,可以指定空数据类型,通过na_values参数进行自定义空值数据设置与判断,如代码清单4-15所示。

代码清单4-15 Pandas中自定义空值设置与判断示例

代码运行结果如下:

4.6.2 缺失值删除

通过isnull()判断各个单元格是否为缺失值后,接下来就是对缺失值进行处理,如果一个变量(列)缺失值较多,就可以把该变量删除。在Pandas中可以使用dropna()将缺失值删除,其格式为:DataFrame.dropna(axis= 0 , how= 'any' , thresh= None , subset= None , inplace= False )。其中主要参数说明见表4-1。

以代码清单4-15中的df为例,删除所有有缺失值的列,代码为:df. dropna (axis= 1 )。

表4-1 dropna()主要参数说明

代码运行结果如下:

如果只想保留非缺失值≥3个的变量,代码为:df. dropna (thresh= 3 ,axis= 1 )。

代码运行结果如下:

如果想删除所有包含缺失值的行和列,代码为:df.dropna()。

代码运行结果如下:

dropna()返回一个新的DataFrame,不会修改原数据。如果想要修改原数据DataFrame,可以使用参数inplace=True。此外,还有个很常用的参数subset,可以指定删除有空值的行,如代码清单4-16所示。

代码清单4-16 删除指定列中包含空值的行示例

代码运行结果如下:

代码运行结果为删除了“Brand”列中包含空值的数据行。 82UQ97wU7pdH3sa8RgmdB5W8kIWXqQ3mXC7S9wKj3wIfhu20kVADyIlltgkc7rYg

点击中间区域
呼出菜单
上一章
目录
下一章
×