我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

日常工作中,遇到的数据集不会像鸢尾花数据集那样完美,总会是出现一些空值。本文就是讲一下如何对数据集中的空值进行统计。以及在csv数据转换为dataframe的时候,对缺失值的处理。

苏南大叔:dataframe特征工程,如何利用df.info()统计缺失值Nan? - 缺失值统计
dataframe特征工程,如何利用df.info()统计缺失值Nan?(图4-1)

大家好,这里是苏南大叔的“十万个编程为什么”博客,这里讲述苏南大叔和计算机代码之间的故事。测试环境:python@3.6.8pandas@1.1.5scikit-learn@1.3.2

缺失值基本表述

在机器学习的dataframe数据中,缺失值是指数据集中某个或某些属性的值是不完整的,缺失值表述为NaN,空值表述为None。这两个表述的边界可能也会发生转换,本文主要讨论的情况是缺失值:NaN

文本csv数据friend.txt【注意不要使用单引号】:

"good","age","sex","home"
1,NA,"m",""
1,18,"f",

注意:该文件文本内部有三种缺失值的情况,分别是:NA,'',以及逗号后面什么都没有的情况。经过pd.read_csv()的转换,上述内容全部变成了缺失值表述:NaN

import pandas as pd
df = pd.read_csv('friend.txt')
print(df)

输出:

   good   age sex  home
0     1   NaN   m   NaN
1     1  18.0   f   NaN

而作为对比,另外一个没有经过read_csv()转换的dataframeNaN和空白字符串的表述,并不会被混淆。

import pandas as pd
import numpy as np
df2 = pd.DataFrame({
    'good':[1,1],
    'age': [np.nan, 18],
    'sex':['m','f'],
    'home':['',np.nan]
})
print(df2)

输出:

   good   age sex home
0     1   NaN   m
1     1  18.0   f  NaN

苏南大叔:dataframe特征工程,如何利用df.info()统计缺失值Nan? - 数据对比nan
dataframe特征工程,如何利用df.info()统计缺失值Nan?(图4-2)

df.info()操作

这个df.info()操作,可以直接看到缺失值的统计数据。
注意:这里的空白字符串也被read_csv()转化为缺失值NaN,从而被统计出来了。

print(df.info())

输出:

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 2 entries, 0 to 1
Data columns (total 4 columns):
 #   Column  Non-Null Count  Dtype
---  ------  --------------  -----
 0   good    2 non-null      int64
 1   age     1 non-null      float64
 2   sex     2 non-null      object
 3   home    0 non-null      float64
dtypes: float64(2), int64(1), object(1)
memory usage: 192.0+ bytes
None
print(df2.info())

输出:

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 2 entries, 0 to 1
Data columns (total 4 columns):
 #   Column  Non-Null Count  Dtype
---  ------  --------------  -----
 0   good    2 non-null      int64
 1   age     1 non-null      float64
 2   sex     2 non-null      object
 3   home    1 non-null      object
dtypes: float64(1), int64(1), object(2)
memory usage: 192.0+ bytes
None

苏南大叔:dataframe特征工程,如何利用df.info()统计缺失值Nan? - info输出
dataframe特征工程,如何利用df.info()统计缺失值Nan?(图4-3)

df.count()操作

这里还有个df.count()操作,对比一下df.info()的结果。

df.count()

输出:

good    2
age     1
sex     2
home    0
dtype: int64

可见:这个df.count()统计的就是df.info()里面的non-null的值。因此,df.count()的结果是包含在df.info()里面的。df.info()的结果,是个dataframe类型,而df.count()的结果,是个series类型。

df.describe()操作

这个就是对数据的均值的计算统计结果,参考文章:

print(df.describe())

输出:

       good   age  home
count   2.0   1.0   0.0
mean    1.0  18.0   NaN
std     0.0   NaN   NaN
min     1.0  18.0   NaN
25%     1.0  18.0   NaN
50%     1.0  18.0   NaN
75%     1.0  18.0   NaN
max     1.0  18.0   NaN
print(df2.describe())

输出:

       good   age
count   2.0   1.0
mean    1.0  18.0
std     0.0   NaN
min     1.0  18.0
25%     1.0  18.0
50%     1.0  18.0
75%     1.0  18.0
max     1.0  18.0

这里表现的非常明显:空白字符串并没有当作数字,而NaN是当成数字进行处理的。

苏南大叔:dataframe特征工程,如何利用df.info()统计缺失值Nan? - describe输出
dataframe特征工程,如何利用df.info()统计缺失值Nan?(图4-4)

data.DESCR属性

如果是sklearn.databases.xxx()加载数据的话,还会有个类似的.desc属性。是对该数据集的一些描述性的文字,参考文章:

结语

对数据进行缺失值判断,是对数据进行特征处理的重要步骤。更多相关文章,请参考:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   python    机器学习