pandas:处理缺失值

您所在的位置:网站首页 怎么用函数填充 pandas:处理缺失值

pandas:处理缺失值

2024-07-04 05:37| 来源: 网络整理| 查看: 265

在实际应用中对于数据进行分析的时候,经常能看见缺失值,下面来介绍一下如何利用pandas来处理缺失值。常见的缺失值处理方式有,过滤、填充。

缺失值的判断

pandas使用浮点值NaN(Not a Number)表示浮点数和非浮点数组中的缺失值,同时python内置None值也会被当作是缺失值。 在这里插入图片描述

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) ''' name toy born 0 Alfred NaN NaT 1 Batman Batmobile 1940-04-25 2 Catwoman Bullwhip NaT ''' print(df.dropna()) ''' name toy born 1 Batman Batmobile 1940-04-25 ''' print(df) ''' name toy born 0 Alfred NaN NaT 1 Batman Batmobile 1940-04-25 2 Catwoman Bullwhip NaT ''' #delete colums print(df.dropna(axis=1) )#delete co ''' name 0 Alfred 1 Batman 2 Catwoman ''' #"所有值全为缺失值才删除" print(df.dropna(how='all')) ''' name toy born 0 Alfred NaN NaT 1 Batman Batmobile 1940-04-25 2 Catwoman Bullwhip NaT ''' #"至少出现过两个缺失值才删除" print(df.dropna(thresh=2)) ''' name toy born 1 Batman Batmobile 1940-04-25 2 Catwoman Bullwhip NaT ''' #"删除这个subset中的含有缺失值的行或列" print (df.dropna(subset=['name', 'born'])) ''' name toy born 1 Batman Batmobile 1940-04-25 ''' 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) ''' A B C D 0 NaN 2.0 NaN 0 1 3.0 4.0 NaN 1 2 NaN NaN NaN 5 3 NaN 3.0 NaN 4 ''' #"横向用缺失值前面的值替换缺失值" print(df.fillna(axis=1, method='ffill')) ''' A B C D 0 NaN 2.0 2.0 0.0 1 3.0 4.0 4.0 1.0 2 NaN NaN NaN 5.0 3 NaN 3.0 3.0 4.0 ''' #"纵向用缺失值上面的值替换缺失值" print(df.fillna(axis=0,method='ffill')) ''' A B C D 0 NaN 2.0 NaN 0 1 3.0 4.0 NaN 1 2 3.0 4.0 NaN 5 3 3.0 3.0 NaN 4 ''' print(df.fillna(0)) ''' A B C D 0 0.0 2.0 0.0 0 1 3.0 4.0 0.0 1 2 0.0 0.0 0.0 5 3 0.0 3.0 0.0 4 '''

不同的列用不同的值填充:,可以通过一个字典用fillna,实现对不同的列填充不同的值

#不同的列用不同的值填充: values={'A':0,'B':1,'C':2,'D':3} print(df.fillna(value=values)) ''' A B C D 0 0.0 2.0 2.0 0 1 3.0 4.0 2.0 1 2 0.0 1.0 2.0 5 3 0.0 3.0 2.0 4 '''

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

values={'A':0,'B':1,'C':2,'D':3} print(df.fillna(value=values,limit=1)) ''' A B C D 0 0.0 2.0 2.0 0 1 3.0 4.0 NaN 1 2 NaN 1.0 NaN 5 3 NaN 3.0 NaN 4 ''' 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) ''' A B C D 0 NaN 2.0 NaN 0 1 3.0 4.0 1 2 NaN NaN NaN 5 3 NaN 3.0 4 '''

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

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

clean_z = df['C'].fillna(0) clean_z[clean_z==''] = 'hello' df['C'] = clean_z print(df) ''' A B C D 0 NaN 2.0 0 0 1 3.0 4.0 hello 1 2 NaN NaN 0 5 3 NaN 3.0 hello 4 '''


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3