处理丢失数据
有两种丢失数据:
- None
- np.nan(NaN)
In [1]:
import numpy as np
In [12]:
%timeit np.arange(0,10000,dtype=int).sum()
In [13]:
%timeit np.arange(0,10000,dtype=float).sum()
In [14]:
%timeit np.arange(0,10000,dtype=object).sum()
1. None
None是Python自带的,其类型为python object。因此,None不能参与到任何计算中。
object类型的运算要比int类型的运算慢得多
计算不同数据类型求和时间
%timeit np.arange(1e5,dtype=xxx).sum()
In [14]:
%timeit np.arange(1e5,dtype=int).sum()
In [15]:
%timeit np.arange(1e5,dtype=float).sum()
In [16]:
%timeit np.arange(1e5,dtype=object).sum()
2. np.nan(NaN)
np.nan是浮点类型,能参与到计算中。但计算的结果总是NaN。
但可以使用np.nan*()函数来计算nan,此时视nan为0。
In [ ]:
3. pandas中的None与NaN
1) pandas中None与np.nan都视作np.nan
创建DataFrame
In [15]:
import pandas as pd
from pandas import Series,DataFrame
In [19]:
df = DataFrame({'age':[20,21,23,19,22],
'salary':[10000,11000,9900,8500,15000]},
index=['张三','李四','小昭','小郭','小齐'],
columns=['age','salary','work'])
df
Out[19]:
In [21]:
df.work['李四':'小郭'] = 'python'
In [22]:
df
Out[22]:
使用DataFrame行索引与列索引修改DataFrame数据
2) pandas中None与np.nan的操作
isnull()
notnull()
dropna()
: 过滤丢失数据fillna()
: 填充丢失数据
In [ ]:
(1)判断函数
isnull()
notnull()
In [27]:
# 根据获得的数据去除原来数据的空数据
s1 = df.isnull().any(axis=1)
In [29]:
# 有了s1这个数据,可以获得哪些数据为空
df[s1]
Out[29]:
In [33]:
# 保留非空数据
# .all()判断轴中所有数据都不为空,返回True
s2 = df.notnull().all(axis=1)
In [34]:
df[s2]
Out[34]:
(2) 过滤函数
dropna()
可以选择过滤的是行还是列(默认为行)
In [38]:
df.dropna()
Out[38]:
In [37]:
df.dropna(axis = 1)
Out[37]:
也可以选择过滤的方式 how = 'all',一行中所有数据为空才删除
In [39]:
df.dropna(how='all')
Out[39]:
In [42]:
df.loc['张三'] = np.nan
df
Out[42]:
In [43]:
df.dropna(how='all')
Out[43]:
(3) 填充函数 Series/DataFrame
fillna()
In [47]:
# 对多有的空数据进行替换
df.fillna(value='Java')
Out[47]:
可以选择前向填充还是后向填充
In [49]:
df.fillna(method='bfill')
Out[49]:
In [50]:
df.fillna(method='ffill')
Out[50]:
对于DataFrame来说,还要选择填充的轴axis。记住,对于DataFrame来说:
- axis=0:index/行
- axis=1:columns/列
In [51]:
#{'backfill', 'bfill', 'pad', 'ffill'
df.fillna(method='ffill')
Out[51]:
In [ ]:
============================================
练习7:
-
简述None与NaN的区别
-
假设张三李四参加模拟考试,但张三因为突然想明白人生放弃了英语考试,因此记为None,请据此创建一个DataFrame,命名为ddd3
-
老师决定根据用数学的分数填充张三的英语成绩,如何实现? 用李四的英语成绩填充张三的英语成绩?
============================================