Pandas数据清洗--空数据的处理

创建DataFrame结构数据: 

df=DataFrame(data=np.random.randint(0,150,size=(100,50)),index=np.arange(100,200),columns=['Python','En','Math','Physics','Chen'])

对df中的空数据进行分析:

#判断df中是否有空数据
df.isnull().any()#any的作用在于:有一个空数据返回结果就是False,如果直接用df.isnull()会返回每一个数据判断后的结果,不便于统计
df.notnull().all()#all的作用在于:所有数据都非空时返回True
df.isnull().sum()#统计df中数据为空的个数,每一列的总数
df.isnull().sum().sum()#统计总的个数

将表格中的一些数据制空,然后在做相应的处理:

#随机将一些数据制空
for i in range(50):
    #行索引
    index=np.random.randint(100,200,size=1)[0]
    #np.random.randint(100,200,size=1)本身返回的是一个1*1数组,加上[0]是为了取出数组中的这个元素

    #列索引
    cols=df.columns#取出df所有的列属性
    col=np.random.choice(cols)#使用np.random.choice(cols)随机取出一个列属性

    #将某个值制空
    df.loc[index,col]=np.NAN#NAN:Not a Number

    #df.loc[index,col]=None代码的功能和上一行一样

对空数据进行填充:

#固定填充,将所有数据都赋值为0
df2.fillna(value=0)

#用均值进行填充,使用各个属性的平均值进行填充
df3=df2.fillna(value=df2.mean())
df3.astype(np.int16)#类型转换

#用中位数进行填充
df4=df2.fillna(df2.median())

#用众数进行填充
#首先要求出列表每一列的众数
zhongshu=[]
for col in df.columns:
    zhongshu.append(df[col].value_counts().index[0])
#此时的众数是list类型,要将其转换成Series类型
s=Series(data=zhongshu,index=df.columns)
#df2=df.fillna(s)

#其他填充方法:前值填充、后值填充等等
"""
method : {'backfill', 'bfill', 'pad', 'ffill', None}, default None
    Method to use for filling holes in reindexed Series
    pad / ffill: propagate last valid observation forward to next valid
    backfill / bfill: use NEXT valid observation to fill gap
"""
df3.fillna(method='backfill')#后值填充,用对应的后一行的值填进来(行作为基准)
df3.fillna(method='pad',axis=1)#前值填充(列作为基准)

对空数据进行删除:

#删除空数据
df4=df.dropna()

 

你可能感兴趣的:(#,python数据分析)