python之pandas处理缺失值

 1、缺失值与空值

空值:在pandas中的空值是""

缺失值:在dataframe中为nan或者naT(缺失时间),在series中为none或者nan

2、判断是否为缺失值

df = pd.DataFrame([[np.nan, 2, np.nan, 0],
         [3, 4, np.nan, 1],
         [np.nan, np.nan, np.nan, 5],
        [np.nan, 3, np.nan, 4]],
         columns=list('ABCD'))
print(df)
df.isna()

python之pandas处理缺失值 

查看每列的空值个数

df.isna().sum()

python之pandas处理缺失值 


3、删除缺失值

DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)

dropna函数  默认参数:删除行,只要有空值就删除,且对原数据不进行修改

axis:维度,axis=0表示index行,axis=1表示columns列,默认为0

how:"all"表示这一行或列中的元素全部缺失(为nan)才删除这一行或列,"any"表示这一行或列中只要有元素缺失,就删除这一行或列

thresh:一行或一列中至少出现了thresh个才删除。

subset:在某些列的子集中选择出现了缺失值的列删除,不在子集中的含有缺失值得列或行不会删除(有axis决定是行还是列)

inplace:刷选过缺失值得新数据是存为副本还是直接在原数据上进行修改。


例子:

import pandas as pd
import numpy as np
df = pd.DataFrame({"name": ['Alfred', 'Batman', 'Catwoman'],
                   "toy": [np.nan, 'Batmobile', 'Bullwhip'],
                   "born": [pd.NaT, pd.Timestamp("1940-04-25"),pd.NaT]})
#原数据 
print(df)
#显示.dropna后的数据
print(df.dropna())
#dropna 默认参数:删除行,只要有空值就删除,且对原数据不进行修改
print(df)

python之pandas处理缺失值

删除行    只要有空值就删除   且此行的空值至少为2个   不在原数据进行修改 

print(df.dropna(axis=0,how='any',thresh=2,inplace=False))

python之pandas处理缺失值

 同上一个例子相似,再加上 如果toy 和born  这两个列中,只要有空值就删除  这个条件

print(df.dropna(axis=0,how='any',thresh=2,subset=['toy','born'],inplace=False))

python之pandas处理缺失值

注意:如果上述两个例子中,inplace=True,那么print中就不会有值,可以再print(df) 来观察结果如何,如下

print(df)
print(df.dropna(axis=0,how='any',thresh=2,inplace=True))
print(df)

python之pandas处理缺失值


4、填充缺失值

DataFrame.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs)

函数作用:填充缺失值

value:需要用什么值去填充缺失值

axis:确定填充维度,从行开始或是从列开始

method:ffill:用缺失值前面的一个值代替缺失值,如果axis =1,那么就是横向的前面的值替换后面的缺失值,如果axis=0,那么则是上面的值替换下面的缺失值。backfill/bfill,缺失值后面的一个值代替前面的缺失值。

            注意这个参数不能与value同时出现

limit:确定填充的个数,如果limit=2,则只填充两个缺失值。


例子:

纵/横向的值来填充缺失值

df = pd.DataFrame([[np.nan, 2, np.nan, 0],
         [3, 4, np.nan, 1],
         [np.nan, np.nan, np.nan, 5],
        [np.nan, 3, np.nan, 4]],
         columns=list('ABCD'))
  
print(df)
  
print('横向用缺失值前面的值替换缺失值')
print(df.fillna(axis=1,method='ffill'))
  
print('纵向用缺失值上面的值替换缺失值')
print(df.fillna(axis=0,method='ffill'))

python之pandas处理缺失值

用0填充缺失值

print(df.fillna(0))

python之pandas处理缺失值

不同的列用不同的值填充

values = {'A':0,'B':1,'C':2,'D':3}
df.fillna(value=values)

python之pandas处理缺失值

添加替换限制

df.fillna(value=values,limit=1)

python之pandas处理缺失值


5、空值处理

缺失值是NAN,空值是没有显示。

替换空值代码:需要把含有空值的那一列提出来单独处理,然后在放进去就好。

df = pd.DataFrame([[np.nan, 2, np.nan, 0],
         [3, 4, "", 1],
         [np.nan, np.nan, np.nan, 5],
        [np.nan, 3, "", 4]],
         columns=list('ABCD'))
  
print(df)
clean_z = df['C'].fillna(0)
clean_z[clean_z==''] = 'hello'
df['C'] = clean_z
print(df)

python之pandas处理缺失值

 

 

 

 

 

 

 

 

 

上一篇:【Python】axis用法详解


下一篇:Python中的numpy模块简述