pandas 缺失值与空值处理

1.相关函数

df.dropna()python

df.fillna()函数

df.isnull()spa

df.isna()3d

2.相关概念

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

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

3.函数具体解释

DataFrame.dropna(axis=0how='any'thresh=Nonesubset=Noneinplace=False)

函数做用:删除含有空值的行或列ip

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

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

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

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

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

例子:

df = pd.DataFrame({"name": ['Alfred', 'Batman', 'Catwoman'],
                "toy": [np.nan, 'Batmobile', 'Bullwhip'],
                  "born": [pd.NaT, pd.Timestamp("1940-04-25"),pd.NaT]})

print df

默认参数:删除行,只要有空值就会删除,不替换。

print df.dropna()
print df

print "delete colums"
print df.dropna(axis=1) #delete col

print "全部值全为缺失值才删除"
print df.dropna(how='all')

print "至少出现过两个缺失值才删除"
print df.dropna(thresh=2)

print "删除这个subset中的含有缺失值的行或列"
print df.dropna(subset=['name', 'born'])


DataFrame.fillna(value=Nonemethod=Noneaxis=Noneinplace=Falselimit=Nonedowncast=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')

print df.fillna(0)

不一样的列用不一样的值填充:


对每列出现的替换值有次数限制,此处限制为一次


DataFrame.isna()

判断是否是缺失值:


isnull同上。

替换空值:

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

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

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

clean_z = df['C'].fillna(0)
clean_z[clean_z==''] = 'hello'
df['C'] = clean_z
print df