Pandas 数据处理:空值清洗、联级、合并、缺省空值填充

python学习网 2021-01-20 20:46:02

      针对空值的处理,首先要来了解一下空值的类型:

 (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 表示行           

           可选择向前或向后填充:

  1.  method ='bfill'  向后覆盖(空值取前一个);
  2.  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)  #通常检测列里是否有空值,因为行数太多

 

阅读(2247) 评论(0)