对于空值的解决,最先要来了解一下空值的类型:
(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) #一般检验列里是不是有空值 ,由于个数过多