pandas 缺失值与空值处理
1.相关函数
df.dropna()
df.fillna()
df.isnull()
df.isna()
2.相关概念
空值:在pandas中的空值是""
缺失值:在dataframe中为nan或者naT(缺失时间),在series中为none或者nan即可
3.函数具体解释
DataFrame.
dropna
(axis=0, how='any', thresh=None, subset=None, inplace=False)
函数作用:删除含有空值的行或列
axis:维度,axis=0表示index行,axis=1表示columns列,默认为0
how:"all"表示这一行或列中的元素全部缺失(为nan)才删除这一行或列,"any"表示这一行或列中只要有元素缺失,就删除这一行或列
thresh:一行或一列中至少出现了thresh个才删除。
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
![](https://i-blog.csdnimg.cn/blog_migrate/b36076bb381ae3b85575aba3e342813a.png)
默认参数:删除行,只要有空值就会删除,不替换。
-
print df.dropna()
-
print df
![](https://i-blog.csdnimg.cn/blog_migrate/cb5bf9df1b7ac6ff89e9ffd5228b32ea.png)
-
print
"delete colums"
-
print df.dropna(axis=
1)
#delete col
![](https://i-blog.csdnimg.cn/blog_migrate/4d5d83ba726023a135453d6544a1906b.png)
-
print
"所有值全为缺失值才删除"
-
print df.dropna(how=
'all')
![](https://i-blog.csdnimg.cn/blog_migrate/3fbb353505875b26c04b1fbe5ac901df.png)
-
print
"至少出现过两个缺失值才删除"
-
print df.dropna(thresh=
2)
![](https://i-blog.csdnimg.cn/blog_migrate/0996f25e61260b6e30a36c24b2b6e64d.png)
-
print
"删除这个subset中的含有缺失值的行或列"
-
print df.dropna(subset=[
'name',
'born'])
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')
![](https://i-blog.csdnimg.cn/blog_migrate/786166d10c6cb74258c8028f065546ed.png)
print df.fillna(0)
![](https://i-blog.csdnimg.cn/blog_migrate/59bb4a48229a3539be276fcfbe3888a0.png)
不同的列用不同的值填充:
对每列出现的替换值有次数限制,此处限制为一次
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
![](https://i-blog.csdnimg.cn/blog_migrate/a646fdb50e7b893deae0a122351b036f.png)
如上,缺失值是NAN,空值是没有显示。
替换空值代码:需要把含有空值的那一列提出来单独处理,然后在放进去就好。
-
clean_z = df[
'C'].fillna(
0)
-
clean_z[clean_z==
''] =
'hello'
-
df[
'C'] = clean_z
-
print df
![](https://i-blog.csdnimg.cn/blog_migrate/2f49328ee19b5404e99f386d49c6bfde.png)