dataframe特征工程,如何利用df.info()统计缺失值Nan?
发布于 作者:苏南大叔 来源:程序如此灵动~日常工作中,遇到的数据集不会像鸢尾花数据集那样完美,总会是出现一些空值。本文就是讲一下如何对数据集中的空值进行统计。以及在csv
数据转换为dataframe
的时候,对缺失值的处理。
大家好,这里是苏南大叔的“程序如此灵动”博客,这里讲述苏南大叔和计算机代码之间的故事。测试环境:python@3.6.8
,pandas@1.1.5
,scikit-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()
转换的dataframe
,NaN
和空白字符串的表述,并不会被混淆。
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
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
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
是当成数字进行处理的。
data.DESCR属性
如果是sklearn.databases.xxx()
加载数据的话,还会有个类似的.desc
属性。是对该数据集的一些描述性的文字,参考文章:
结语
对数据进行缺失值判断,是对数据进行特征处理的重要步骤。更多相关文章,请参考:
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。