数据清洗部分知识

判断是否为空值

用的函数为isnull()和notnull()

# isnull()函数和notnull()最终输出结果都为
series_obj = pd.Series([1,2,np.nan])
series_obj

-------------------------下面是输出结果---------------------------
0    1.0
1    2.0
2    NaN
dtype: float64
series_obj.isnull()    # 输出结果均为布尔值
series_obj.notnull()
​
---------------------------下面是输出结果-----------------------------
0    False
1    False
2     True
dtype: bool
------------------------------------
0     True
1     True
2    False
dtype: bool

删除空值drop()

dropna()函数

dropna(axis=0,how='any',thresh=None,subset=None,inplace=False)

axis:确定行或列,取值可以为0或1

how:确定过滤的标准,取值可以为any或all

thresh:表示有效数据量的最小要求,若传入了2,则是要求该行或该列至少有两个非NAN值时将其保留

subset:表示在特定的子集中寻找NAN值

inplace:表示是否在原数据上操作为True表示修改原数据

# 下面是一个dropna()的小例子
df_obj=pd.DataFrame({"类别":['小说','散文随笔','青春文学','传记'],"书名":[np.nan,'《皮囊》','《旅程结束》','《老舍自传》'],"作者":['老舍',None,'张其鑫','老舍']})
df_obj
​
-----------------------------------------下面为输出结果-------------------------------------
    类别         书名        作者
0   小说         NaN        老舍
1   散文随笔    《皮囊》      None
2   青春文学    《旅程结束》  张其鑫
3   传记       《老舍自传》  老舍
df_obj.dropna(thresh=3)  # 至少有三个非NAN值时将其进行保留
​
df_obj.dropna(how='any')  # 只要有NAN值就将其进行删除,与thresh不能同时用
​
----------------------------------------下面是输出结果------------------------------------------
​
          类别         书名        作者
2       青春文学    《旅程结束》    张其鑫
3       传记        《老舍自传》    老舍
---------------------------------------------------
          类别         书名        作者
2       青春文学    《旅程结束》    张其鑫
3       传记        《老舍自传》    老舍

填充缺失值 fillna()

fillna(value=None,method=None,axis=None,inplace=False,limit=None)

value:用于填充的数据

method:表示填充方式,默认值为None

pad/ffill:向前填充

backfill/bfill:向后填充

value 和 method 不能同时存在

from numpy import NaN
df_obj=pd.DataFrame({'A':[1,2,3,NaN],
                    'B':[NaN,4,NaN,6],
                   'C':['a',7,8,9],
                   'D':[NaN,2,3,NaN]})
df_obj
​
-------------------------------------下面是输出结果-------------------------------------
​
       A    B   C   D
0     1.0  NaN  a   NaN
1     2.0  4.0  7   2.0
2     3.0  NaN  8   3.0
3     NaN  6.0  9   NaN
df_obj.fillna('33')
​
df_obj.fillna(method="ffill")
​
df_obj.fillna(method="bfill")
​
# 指定填充列(用字典形式)
df_obj.fillna({'A':3,'B':2})
​
-----------------------------------下面是输出结果------------------------------------
​
       A    B    C  D
0     1.0   33   a  33
1     2.0   4.0  7  2.0
2     3.0   33   8  3.0
3     33    6.0  9  33
----------------------------------------------
​
       A    B    C  D
0     1.0   NaN  a  NaN
1     2.0   4.0  7  2.0
2     3.0   4.0  8  3.0
3     3.0   6.0  9  3.0  
---------------------------------------------
​
       A    B    C  D
0      1.0  4.0  a  2.0
1      2.0  4.0  7  2.0
2      3.0  6.0  8  3.0
3      NaN  6.0  9  NaN
---------------------------------------------
​
​
       A    B    C  D
0     1.0   2.0  a  NaN
1     2.0   4.0  7  2.0
2     3.0   2.0  8  3.0
3     3.0   6.0  9  NaN

重复值的处理

duplicated() 和 drop_duplicated() ,前者标记是否有重复值,后者删除重复值。

duplicated(subset=None,keep='first')

subset:用于识别重复的列标签或者列标签序列,默认识别所有列标签

first:删除重复项并保留第一次出现的项,取值可以为 first, last 或 False, 他们代的含是:first从前向后查找,除了第一次出现外,其余相同的被标记为重复。last从后向前查找,除了第一次出现外,其余相同的被标记为重复。False所有相同的均标记为重复

duplicated()需要强调的地方

  1. 只有数据表中两个条目间所有列的内容都相等时,duplicated才会判断为重复值。除此之外,duplicated()方法也可以单独对某一列进行重复值判断

  2. duplicated()方法支持从前向后和从后向前两种重复模式值查找模式,默认是从前向后查找判断重复值的换句话说,就是将后出现的相同条目判断为重复值。

import pandas as pd
import numpy as np
person_info = 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':['女','女','男','男','男','男']})
person_info.duplicated()
​
​
-----------------------------------下面是输出结果---------------------------------
0    False
1    False
2    False
3    False
4     True
5    False
dtype: bool

drop_duplicates()

drop_dulicates(subset=None,keep='first',inplace=False)

subset:用于识别重复的列标签或者列标签序列,默认识别所有列标签

first:删除重复项并保留第一次出现的项,取值可以为 first, last 或 False, 他们代的含是:first从前向后查找,除了第一次出现外,其余相同的被标记为重复。last从后向前查找,除了第一次出现外,其余相同的被标记为重复。False所有相同的均标记为重复

inplace:表示是否在原数据上操作。

person_info = 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':['女','女','男','男','男','男']})
person_info.drop_duplicates()
​
----------------------------------下面是输出结果--------------------------------
​
id      name    age  height gender
0   1   小铭     18    180    女
1   2   小月月   18    180    女
2   3   彭岩     29    185    男
3   4   刘华     58    175    男
5   5   周华     36    178    男
•

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值