4、Python 数据分析-Pandas数据清洗【1】

1、处理丢失数据

  • 有两种丢失数据:
    • None
    • np.nan(NaN)

2、两种丢失数据的区别

2.1、None是Python自带的,其类型为Python object。因此,None不能参与到任何计算中。

object类型的运算要比int类型的运算慢得多

计算不同数据类型求和时间

type(None)
>>>
NoneType

2.2、np.nan(NaN)

np.nan是浮点型,能参与到计算中。但计算结果总是NaN。

可以使用np.nan*()函数来计算nan,此时视nan为0。

type(np.nan)
>>>
float

2.3、pandas中的None与NaN

1)pandas中None与np.nan都视作np.nan

df = DataFrame({'age':[18,22,34,25,13],
                'sex':['男','女','男','男','女']},
                index=['小张','小王','小李','小马','小胡'],
                columns=['age','sex','hobby'])

2.4、pandas处理空值操作

  • isnull
  • notnull
  • any
  • all
  • dropna
  • fillna
小马,小胡的hobby列没有值,需要进行数据清洗。
df.isnull().any(axis=1)#以行为单位
>>>
小张    False
小王    False
小李    False
小马     True
小胡     True
dtype: bool
#查看哪些数据为空值
s = df.isnull().any(axis=1)
df[s]

# 将空的数据进行提取
s1 = df.notnull()

s2 = s.all(axis=1)
df[s2]

notnull()判断数据不为空,所有数据都不为空,才能提取出来,用all(),只要有一个为空用any()。dropna():高级用法,直接将存在缺失数据的行删除

过滤行

df.dropna(axis=0)

也可以选择过滤的方式 how='any'

df.dropna(axis=0,how='any')

fillna():填充丢失数据

     填充函数Series/DataFrame
#对所有的NaN数据进行替换
df.fillna(value='排BUG')

#用下一行数据进行填充(近邻值)
df.fillna(method='bfill',axis=0)
#用上一行数据进行填充(近邻值)
df.fillna(method='ffill',axis=0)

如果将 inplace=True ,就会更改原DataFrame数据,而不是返回新的DataFrame数据。

3、练习

自定义一个携带空值的df,然后要求使用列的均值填充列中的空值

import numpy as np


df = DataFrame(data=np.random.randint(0,100,size=(10,8)),columns=['A','B','C','D','E','F','G','H'])
df.iloc[1,3] = None
df.iloc[3,4] = np.nan
df.iloc[5,5] = np.nan
df.iloc[2,4] = np.nan
df.iloc[2,5] = np.nan

for col in df.columns:	
    #将存有空值的列找到
    if df[col].isnull().sum() > 0:
        df[col] = df[col].fillna(value=np.mean(df[col]))

posted @ 2020-06-28 23:01  自己有自己的调调、  阅读(210)  评论(0编辑  收藏  举报