数据预处理(纯干货,适合小白学习)

数据预处理是数据分析的重要步骤,包括数据清洗、数据合并、数据重塑和数据转换。数据清洗涉及空值、缺失值、重复值和异常值的处理;数据合并有轴向堆叠、主键合并和根据索引合并;数据重塑可通过层次化索引和轴向旋转实现;数据转换则涵盖重命名、离散化和哑变量处理。
摘要由CSDN通过智能技术生成

数据预处理

数据清洗

  • 数据清洗目的:将脏数据(这里指是对数据分析没有意义、格式非法、不在指定范围的数据)清洗干净,是原数据具有完整性、唯一性、权威性、合法性、一致性等特点。
  • pandas常见数据清洗:空值和缺失值的处理,重复值的处理,异常值的处理,统一数据格式。

空值和缺失值的处理

  • 空值:数据未知,不适用或将在以后添加数据。None
  • 缺失值:数据集中或某些属性的值是不完整的,产生的原因主要有人为原因和机械原因,机器原因是由于机械故障未能是搜集或存储失败,认为原因是由主观失误或有意隐瞒造成。NaN
  • 使用isnull和notnull函数可以判断数据集中是否存在空值和缺失值,对于缺失数据可以使用dropna()和fillna()方法进行删除和填充
  1. isnull()函数和notnull()函数
  • isnull()函数和notnull()函数的语法格式如下:
    pandas.isnull(obj) 存在NaN或者None的话则就将在这个位置标记True,否则标记False
    pandas.notnull(obj) 存在NaN或者None的话则就将在这个位置标记False,否则标记True
ser_obj = Series([1,NaN,None]) #notnull
pd.notnull(ser_obj)
0     True
1    False
2    False
dtype: bool

pd.isnull(ser_obj)          #isnull
0    False
1     True
2     True
dtype: bool


pd.isna(ser_obj)          #isna
0    False
1     True
2     True
dtype: bool
  1. dropna()方法
  • dropna()的方法是删除含有空值和缺失值的行和列,
  • dropna(axis=0,how=‘any’,thresh=None,subset=None,inplace=False)
  • axis:确定过滤行或列,取值可以为

0或index:删除包含缺失值的行,默认为0
1或columns:删除包含缺失值的列

  • how:

any:默认值,如果存在NaN值,则删除该行或者该列
all:如果所有值都是NaN值,则删除该行或者该列

  • thresh:表示有效数据量的最小要求,若传入了2,则是要求该行或该列至少有两个非NaN值时将其保留
  • subset:表示在特定的子集中寻找空值
  • inplace:表示是否在原数据上操作,如果设置为True,则表示修改源数据,如果设置为False,则表示修改原数据的副本,返回新的数据
df_obj = pd.DataFrame({'类别':['小说','随笔散文','青春文字','传记'],
                       '书名':[NaN,'《皮囊》','《旅行结束时》','《老舍自传》'],
                       '作者':['老舍',None,'张琪新','老舍']})
df_obj
    类别	书名	作者
0	小说	NaN	老舍
1	随笔散文	《皮囊》	None
2	青春文字	《旅行结束时》	张琪新
3	传记	《老舍自传》	老舍
df_obj.dropna()
类别	书名	作者
2	青春文字	《旅行结束时》	张琪新
3	传记	《老舍自传》	老舍
  1. 填充空值和缺失值
  • 填充空值和缺失值的方法有很多,比如人工填写,特殊值填写,热卡填充等,在pd中的fillna()方法可以实现填充空值或缺失值
  • fillna(
    value=None,
    method=None,
    axis=None,
    inplace=False,
    limit=None,
    downcast=None,
    **kwargs,
    )
  • value:用于填充的数值
  • method:表示填充方式,默认值为None,另外还有以下取值

ffill:将最后一个有效数据向后传播,也就是说用缺失值前面以得一个值代替缺失值
bfill:将最后一个有效值向前传播,也就是说用缺失值后面的一个值代替缺失值
limit:可以连续填充的最大数量,默认为None

df_obj = pd.DataFrame({'A':[1.0,2.0,3.0,NaN],'B':[NaN,2.0,NaN,6.0],'C':['a',7,8,9],'D':[NaN,2.0,3.0,NaN]})
df_obj                 #查看原数据
A	B	C	D
0	1.0	NaN	a	NaN
1	2.0	2.0	7	2.0
2	3.0	NaN	8	3.0
3	NaN	6.0	9	NaN

df_obj.fillna(66)        #使用66进行填充
A	B	C	D
0	1.0	66.0	a	66.0
1	2.0	2.0	7	2.0
2	3.0	66.0	8	3.0
3	66.0	6.0	9	66.0

df_obj.fillna({'A':5.0,'B':8.0,'C':99}) #传入字典根据索引进行填充
A	B	C	D
0	1.0	8.0	a	NaN
1	2.0	2.0	7	2.0
2	3.0	8.0	8	3.0
3	5.0	6.0	9	NaN


df_obj.fillna(method='bfill')    #使用缺失值后边一个的数据进行填充
A	B	C	D
0	1.0	2.0	a	2.0
1	2.0	2.0	7	2.0
2	3.0	6.0	8	3.0
3	NaN	6.0	9	NaN

重复值的处理

  • 当数据出先重复值的时候,大部分时间都需要把重复值进行删除,pandas提供了两个方法专门处理数据中的重复值,分别为duplicated()和drop_duplicates()方法
  • duplicated:确认是否有缺失值
  • drop_duplicates:删除缺失值
  1. 使用duplicated()方法处理重复值

duplicated(subset=None,keep=‘first’)

  • subset:用于识别重复的列标或列标签序列,默认识别所有的列标签
  • keep:删除重复项并保留第一次出现的项,取值可以为first,last,False(first:从前向后查找,除了第一次出现外,其余相同的标记为重复,last:从后向前查找,除了最后一次出现外,其余相同的标记为重复,False:所有相同的都标为重复)
df_obj = pd.DataFrame({'id':[1,2,3,4,4,5],
                       'name':['小鸣','小月月','彭艳','硫化','硫化','周华'],
                       'age':[18,18,29,58,58,36],
                       'height':[180,180,185,175,175,178],
                       'gender':['女','女','男','男','男','男']})
df_obj
    id	name	age	height	gender
0	1	小鸣	18	180	女
1	2	小月月	18	180
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ashan927

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值