处理丢失数据
有两种丢失数据:
- None
- np.nan(NaN)
1. None
None是Python自带的,其类型为python object。因此,None不能参与到任何计算中。
In [1]:
#查看None的数据类型
2. np.nan(NaN)
np.nan是浮点类型,能参与到计算中。但计算的结果总是NaN。
In [2]:
#查看np.nan的数据类型
3. pandas中的None与NaN
1) pandas中None与np.nan都视作np.nan
In [1]:
import numpy as np
import pandas as pd
from pandas import Series,DataFrame
创建DataFrame
In [2]:
df = DataFrame(data=np.random.randint(10,50,size=(8,8)))
df
Out[2]:
In [18]:
#将某些数组元素赋值为nan
In [4]:
df.iloc[1,3] = None
df.iloc[2,2] = None
df.iloc[4,2] = None
df.iloc[6,7] = np.nan
In [5]:
df
Out[5]:
2) pandas处理空值操作
isnull()
notnull()
dropna()
: 过滤丢失数据fillna()
: 填充丢失数据
In [8]:
df.isnull()
Out[8]:
In [14]:
#创建DataFrame,给其中某些元素赋值为nan
df.notnull().all(axis=1) #notnull(all) isnull(any)
Out[14]:
In [15]:
df.loc[df.notnull().all(axis=1)]
Out[15]:
(1)判断函数
isnull()
notnull()
- df.notnull/isnull().any()/all()
In [4]:
#过滤df中的空值(只保留没有空值的行)
df.dropna() 可以选择过滤的是行还是列(默认为行):axis中0表示行,1表示的列
In [17]:
df.dropna(axis=0)
Out[17]:
(3) 填充函数 Series/DataFrame
fillna()
:value和method参数
In [18]:
df
Out[18]:
可以选择前向填充还是后向填充
In [21]:
df.fillna(method='ffill',axis=1)
Out[21]:
method 控制填充的方式 bfill ffill
============================================
练习7:
-
简述None与NaN的区别
-
假设张三李四参加模拟考试,但张三因为突然想明白人生放弃了英语考试,因此记为None,请据此创建一个DataFrame,命名为ddd3
-
老师决定根据用数学的分数填充张三的英语成绩,如何实现? 用李四的英语成绩填充张三的英语成绩?
============================================
In [24]:
data = pd.read_excel('测试数据.xlsx')
data.drop(labels=['none1','none2'],axis=1,inplace=True)
data
Out[24]:
In [27]:
data.shape
Out[27]:
In [26]:
data.dropna(axis=0).shape
Out[26]:
In [35]:
#检测哪些列中存在空值
data.isnull().any(axis=0)
Out[35]:
In [34]:
data.fillna(method='ffill',axis=0,inplace=True)
data.fillna(method='bfill',axis=0,inplace=True)