数据集中通常会包含null值或空值,对于空值的处理有2种方式:
- 删除带有null的行或列
- 用非空值填充null项
检查null值
要处理数据集中的null值,首先要找出DataFrame中的哪些单元格是空的:
movies_df.isnull()
输出
rank genre description director actors year runtime rating votes revenue_millions metascore Title Guardians of the Galaxy False False False False False False False False False False False Prometheus False False False False False False False False False False False Split False False False False False False False False False False False Sing False False False False False False False False False False False Suicide Squad False False False False False False False False False False False The Great Wall False False False False False False False False False False False La La Land False False False False False False False False False False False ... ... ... ... ... ... ... ... ... ... ... ... Taare Zameen Par False False False False False False False False False False False Take Me Home Tonight False False False False False False False False False False True Resident Evil: Afterlife False False False False False False False False False False False Project X False False False False False False False False False False False Secret in Their Eyes False False False False False False False False False True False Hostel: Part II False False False False False False False False False False False Step Up 2: The Streets False False False False False False False False False False False Search Party False False False False False False False False False True False Nine Lives False False False False False False False False False False False [1000 rows x 11 columns]
isnull()
方法返回一个DataFrame,其中每个单元格都是True或False,表示该单元格是不是null状态。
为了统计每一列的空值,可以使用聚合函数sum()
进行求和:
movies_df.isnull().sum()
输出
rank 0 genre 0 description 0 director 0 actors 0 year 0 runtime 0 rating 0 votes 0 revenue_millions 128 metascore 64 dtype: int64
.isnull()
本身并不是很有用,通常与sum()
等其他方法一起使用。
现在可以看到,数据中revenueue_millions列有128个缺失值,metascore列有64个缺失值。
删除null值
当数据集中有少量缺失值时,建议删除null数据。
删除null值非常简单:
movies_df.dropna()
这个操作将删除任何至少有一个空值的行,但是它将返回一个新的DataFrame,而不更改原来的数据,更改原数据可以在这个方法中指定inplace=True
。
对于我们的数据集,这个操作将删除128行,其中revenue_millions为空,以及64行,其中metascore为空。
除了删除行,还可以通过设置axis=1
删除空值列:
movies_df.dropna(axis=1)
在我们的数据集中,这个操作将删除revenue_millions和metascore列。
axis=1
指轴1,即列,轴0是行,这是NumPy中的概念。
NumPy数组轴
NumPy多维数组由轴表示,其中axis-0表示列,axis-1表示行。