针对空值的处理,首先要来了解一下空值的类型:
(1)、pandas中的None 和 NaN 有什么区别?
type(None) --类型是 NoneType 空的对象类型
type(NaN) --类型是 float 浮点型
注意:Pandas中None 和 NaN 都视作np.nan
(2)、Pandas 的空值操作
isnull() 判断null ,返回True/False 的数组 notnull() 空值判断 dropna() 过滤空值数据 fillna() 填充丢失数据
- 使用pandas过滤空值:
df.isnull().any(axis = 1) # 解析: any中轴向:axis = 0 表示列 axis = 1 表示行 # 新函数: all(axis = 0) 所有数据 any(axis = 0) 任何一个 # df.isnull()表示返回一组True/False 的数组,any(axis = 1)表示横向判断行,一行中任意一个为true就这行就返回 True, 最后返回一维数组 # 最终返回结果如下: 1 False 2 True 3 False 4 False 5 True # 扩展: df.isnull().all(axis = 1) 一行中任意一个为False就这行就返回 False, 最后返回一维数组
notnull() 的使用方法和isnull()正好相反:
df.notnull().all(axis = 1) # 一行中任意一个为False就这行就返回 False, 最后返回一维数组 # 最终返回结果如下: 1 True 2 False 3 True 4 True 5 False # 总结: 固定搭配如下: isnull() --> any() notnull() -->all()
最后过滤掉有空值的行
df.iloc[df.notnull().all(axis = 1)]
- df.dropna() 过滤空数据所在的行或列 (可直接过滤)
df.dropna() 可以选择过滤的是行还是列,默认是行,dropna中axis=0 表示行; axis=1 表示列
df.dropna(axis=0) #等同于上面过滤方式,封装了上面操作
- fillna() 填充丢失/空值数据
fillna中 axis=0 表示列;axis=1 表示行
可选择向前或向后填充:
- method ='bfill' 向后覆盖(空值取前一个);
- method ='ffill' 向前覆盖(空值取后一个);
df.fillna(value =5555) #填充df 中所有空值数据 df.fillna(method ='bfill',axis=0) # 列里的空值取列里空值取前一个填充
- drop 删除数据
drop 中 axis=0 表示行,axis=1 表示列
删除无用的列,列索引:'name','name1';inplace参数指是否替代原来的df
data.drop(labels=['name','name1'],axis = 1,inplace=True)
删除无用的行,行索引:'涨跌'
df.drop(['涨跌'], axis=0, inplace=True)
(3)Pandas 删除空值行数据、替换空值案例代码:
import pandas as pd from pandas import Series,DataFram import numpy as np # 提取数据 data = pd.read_excel('./测试数据.excel') # 删除无用的列,列索引:'name','name1' data.drop(labels=['name','name1'],axis = 1,inplace=True) # 删除空数据所在的行 data.dropna(axis=0) # 覆盖 v_1 = data.fillna(method='ffill',axis=0) .fillna(method='bfill',axis=0) # 检测v_1中是否有空值 v_1.isnull().any(axis = 0) #通常检测列里是否有空值,因为行数太多