假设我们有一份不完整的DataFrame类型的数据,我们在使用它之前要对其进行数据的清洗。

        使用pandas我们可以有两种方式来实现对数据的清洗

先假设我们存在下面一组不完整的数据:

import numpy as np
import pandas as pd
from pandas import DataFrame,Series
df=DataFrame(data=np.random.randint(0,100,(12,10)))
df.iloc[3,3]=None
df.iloc[1,7]=None
df.iloc[6,6]=None
df.iloc[8,9]=None
df.iloc[3,9]=None

1.删除缺失值所在的行(一般情况下删除行,特殊情况下也可以删除列)  

方法①:

首先用isnull()函数返回df所有数据哪些为空(返回布尔型),再用any()函数检测行或列中是否存在True

在用loc()函数与index属性得到缺失值所在行,把他删去即可。

# any用来检测行或列中是否存在True
df.isnull().any(axis=1)
df.loc[df.isnull().any(axis=1)].index
df.drop(labels=df.loc[df.isnull().any(axis=1)].index,axis=0) #可以指定inplace=True

方法②:

与①同理,只需把isnull()改为notnull(),把any()改为all()即可。

df.notnull().all(axis=1)
df.loc[df.notnull().all(axis=1)]

方法③:

最简单的方法,直接用dropna()函数指定行或列删除即可。

df.dropna(axis=0)

2.将缺失值进行填充

        一般情况下我们直接将缺失值所在行删除,如果在特殊情况下删除所有缺失行造成的成本过大(比如10行数据中有6行存在缺失值),我们可以将缺失值进行合理化的填充。

使用fillna()函数可以帮助我们把缺失值进行填充

df.fillna(method='ffill',axis=1) #将缺失值所在行向前填充
df.fillna(method='bfill',axis=1) #将缺失值所在行向后填充
df.fillna(method='ffill',axis=0) #将缺失值所在列向前填充
df.fillna(method='bfill',axis=0) #将缺失值所在列向后填充

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐