当前位置:   article > 正文

pandas数据预处理---缺失值处理、重复数据处理、更改索引、行列删除_pandas将异常值重置为缺失值

pandas将异常值重置为缺失值

pandas数据预处理

1 缺失值查看与处理

缺失值就是由某些原因导致部分数据为空,对于为空的这部分数据我们一般有两种处理方式,
在pandas里缺失数据用NaT(Not a Time,时间缺失值)、NaN、nan等来表示,有时None值也会被当作缺失数据处理
一种是删除,即把含有缺失值的数据删除
另一种是填充,即把缺失的那部分数据用某个值代替
源数据如下:
源数据情况

1.1 缺失值查看

1.1.1 infor()方法

直接调用 info()方法就会返回每一列的缺失情况

import pandas as pd
df = pd.read_excel(r"D:\testdata\data.xlsx") 
df.info()
  • 1
  • 2
  • 3
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 88 entries, 0 to 87
Data columns (total 15 columns):
 #   Column   Non-Null Count  Dtype  
---  ------   --------------  -----  
 0   实际价格(元)  88 non-null     float64
 1   运费(元)    88 non-null     float64
 2   数量       88 non-null     int64  
 3   实际支付(元)  88 non-null     float64
 4   状态       88 non-null     object 
 5   商品SKU信息  88 non-null     object 
 6   省        88 non-null     object 
 7   市        88 non-null     object 
 8   区        88 non-null     object 
 9   会员等级     88 non-null     object 
 10  优惠信息     88 non-null     object 
 11  是否白付美支付  88 non-null     object 
 12  货款退款金额   88 non-null     float64
 13  运费退款金额   88 non-null     float64
 14  退款完成时间   41 non-null     object 
dtypes: float64(5), int64(1), object(9)
memory usage: 10.4+ KB
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

Python中缺失值一般用NaN表示,从用info()方法的结果来看,退款完成时间这一列是41 non-null object ,表示有47个非空值,该列有47个空值

1.1.2 isnull()方法

用isnull()方法来判断哪个值是缺失值,如果是缺失值则返回True,如果不是缺失值则返回False

df.isnull()
  • 1
实际价格(元) 运费(元) 数量 实际支付(元) 状态 商品SKU信息 会员等级 是否白付美支付 货款退款金额 运费退款金额 退款完成时间
1 False False False False False False False False False False False False False
2 False False False False False False False False False False False False False
3 False False False False False False False False False False False False True
4 False False False False False False False False False False False False False
5 False False False False False False False False False False False False True
... ... ... ... ... ... ... ... ... ... ... ... ... ...
84 False False False False False False False False False False False False True
85 False False False False False False False False False False False False False
86 False False False False False False False False False False False False True
87 False False False False False False False False False False False False True
88 False False False False False False False False False False False False True

88 rows × 13 columns

1.1.3 notnull()方法

notnull()判断对象的元素是否不是缺失值,不是则对应返回值是True,是则对应返回值是False

df.notnull()
  • 1
实际价格(元) 运费(元) 数量 实际支付(元) 状态 商品SKU信息 会员等级 是否白付美支付 货款退款金额 运费退款金额 退款完成时间
1 True True True True True True True True True True True True True
2 True True True True True True True True True True True True True
3 True True True True True True True True True True True True False
4 True True True True True True True True True True True True True
5 True True True True True True True True True True True True False
... ... ... ... ... ... ... ... ... ... ... ... ... ...
84 True True True True True True True True True True True True False
85 True True True True True True True True True True True True True
86 True True True True True True True True True True True True False
87 True True True True True True True True True True True True False
88 True True True True True True True True True True True True False

88 rows × 13 columns

1.2 缺失值删除

缺失值分为两种,一种是一行中某个字段是缺失值;
另一种是一行中的字段全部为缺失值,即为一个空白行

1.2.1 dropna()方法

dropna(axis=0,how=“any”)
方法默认删除含有缺失值的行,也就是只要某一行有缺失值就把这一行删除

axis : 指定需要删除包含缺失值的行或列,当值为0或者index时,以行方向进行删除,当值为1或者columns时,以列方向进行删除;
how : 可选项有"any"与"all",默认值为"any"删除含有缺失值的行,也就是只要某一行有缺失值就把这一行删除,为"all"时,只有一行或一列的所有值都为缺失值时,才进行删除
  • 1
  • 2
df.dropna().head()
  • 1
实际价格(元) 运费(元) 数量 实际支付(元) 状态 商品SKU信息 会员等级 是否白付美支付 货款退款金额 运费退款金额 退款完成时间
1 218.9 0.0 1 218.9 已付款未发货 金色110cm 1个 内蒙古自治区 呼伦贝尔市 获取会员信息失败! 0.0 0.0 tihauntime
2 218.9 0.0 1 218.9 交易关闭 金色120cm 1个 内蒙古自治区 呼伦贝尔市 获取会员信息失败! 218.9 0.0 2020-11-12 09:35:43
4 218.9 0.0 1 218.9 交易关闭 黑色M 105-120斤 1个 浙江省 嘉兴市 获取会员信息失败! 218.9 0.0 2020-11-12 06:37:25
6 196.9 0.0 1 196.9 交易关闭 黑色M 1个 广东省 湛江市 获取会员信息失败! 196.9 0.0 2020-11-12 08:54:51
7 196.9 0.0 1 196.9 交易关闭 黑色M 1个 广东省 湛江市 获取会员信息失败! 196.9 0.0 2020-11-12 00:13:28

删除空白行,只要给dropna()方法传入一个参数how = "all"即可,这样就会只删除那些全为空值的行,不全为空值的行就不会被删除。

df.dropna(how="all").head()
  • 1
实际价格(元) 运费(元) 数量 实际支付(元) 状态 商品SKU信息 会员等级 是否白付美支付 货款退款金额 运费退款金额 退款完成时间
1 218.9 0.0 1 218.9 已付款未发货 金色110cm 1个 内蒙古自治区 呼伦贝尔市 获取会员信息失败! 0.0 0.0 tihauntime
2 218.9 0.0 1 218.9 交易关闭 金色120cm 1个 内蒙古自治区 呼伦贝尔市 获取会员信息失败! 218.9 0.0 2020-11-12 09:35:43
3 328.9 0.0 1 328.9 交易取消 米白S 1个 山东省 枣庄市 获取会员信息失败! 0.0 0.0 NaN
4 218.9 0.0 1 218.9 交易关闭 黑色M 105-120斤 1个 浙江省 嘉兴市 获取会员信息失败! 218.9 0.0 2020-11-12 06:37:25
5 185.9 0.0 1 185.9 已付款未发货 黑色L 1个 陕西省 咸阳市 获取会员信息失败! 0.0 0.0 NaN

1.3 缺失值填充

1.3.1 fillna()方法

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

value : 指定需要填充的值, 可以是变量, 字典, Series, or DataFrame,不能是列表

method :指定填充方法,可选项为{‘backfill’, ‘bfill’, ‘pad’, ‘ffill’, None}, 默认值 None;(‘backfill’, ‘bfill’向前填充,‘pad’, ‘ffill’向后填充)

axis : 指定填充方向,可选项为{0 or‘index’, 1 or‘columns’}0 or‘index’为行方向,1 or‘columns’为列方向

inplace : 默认值 False。如果为Ture,则修改原数据

limit : 默认值 None; 如果指定了method,则这是连续的NaN值的前向/后向填充的最大数量。 换句话说,如果连续NaN数量超过这个数字,它将只被部分填充。 如果未指定方法,则这是沿着整个轴的最大数量,其中NaN将被填充。 如果不是无,则必须大于0。

downcast : dict, 默认是 None; 如果可能的话,把 item->dtype 的字典将尝试向下转换为适当的相等类型的字符串(例如,如果可能的话,从float64到int64)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

方法对数据表中的所有缺失值进行填充,在fillna后面的括号中输入要填充的值即可

df.fillna(0).head()  #将所有缺失值填充为0
  • 1
实际价格(元) 运费(元) 数量 实际支付(元) 状态 商品SKU信息 会员等级 是否白付美支付 货款退款金额 运费退款金额 退款完成时间
1 218.9 0.0 1 218.9 已付款未发货 金色110cm 1个 内蒙古自治区 呼伦贝尔市 获取会员信息失败! 0.0 0.0 tihauntime
2 218.9 0.0 1 218.9 交易关闭 金色120cm 1个 内蒙古自治区 呼伦贝尔市 获取会员信息失败! 218.9 0.0 2020-11-12 09:35:43
3 328.9 0.0 1 328.9 交易取消 米白S 1个 山东省 枣庄市 获取会员信息失败! 0.0 0.0 0
4 218.9 0.0 1 218.9 交易关闭 黑色M 105-120斤 1个 浙江省 嘉兴市 获取会员信息失败! 218.9 0.0 2020-11-12 06:37:25
5 185.9 0.0 1 185.9 已付款未发货 黑色L 1个 陕西省 咸阳市 获取会员信息失败! 0.0 0.0 0

也可以按不同列填充,只要在 fillna()方法的括号中指明列名即可。

df.fillna({
   
  • 1
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/煮酒与君饮/article/detail/759957
推荐阅读
相关标签
  

闽ICP备14008679号