基于pandas的数据清洗

        假设我们有一份不完整的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) #将缺失值所在列向后填充

你可能感兴趣的:(Python,pandas,数据分析)