赞
踩
缺失值就是由某些原因导致部分数据为空,对于为空的这部分数据我们一般有两种处理方式,
在pandas里缺失数据用NaT(Not a Time,时间缺失值)、NaN、nan等来表示,有时None值也会被当作缺失数据处理
一种是删除,即把含有缺失值的数据删除
另一种是填充,即把缺失的那部分数据用某个值代替
源数据如下:
直接调用 info()方法就会返回每一列的缺失情况
import pandas as pd
df = pd.read_excel(r"D:\testdata\data.xlsx")
df.info()
<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
Python中缺失值一般用NaN表示,从用info()方法的结果来看,退款完成时间这一列是41 non-null object ,表示有47个非空值,该列有47个空值
用isnull()方法来判断哪个值是缺失值,如果是缺失值则返回True,如果不是缺失值则返回False
df.isnull()
实际价格(元) | 运费(元) | 数量 | 实际支付(元) | 状态 | 商品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
notnull()判断对象的元素是否不是缺失值,不是则对应返回值是True,是则对应返回值是False
df.notnull()
实际价格(元) | 运费(元) | 数量 | 实际支付(元) | 状态 | 商品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
缺失值分为两种,一种是一行中某个字段是缺失值;
另一种是一行中的字段全部为缺失值,即为一个空白行
dropna(axis=0,how=“any”)
方法默认删除含有缺失值的行,也就是只要某一行有缺失值就把这一行删除
axis : 指定需要删除包含缺失值的行或列,当值为0或者index时,以行方向进行删除,当值为1或者columns时,以列方向进行删除;
how : 可选项有"any"与"all",默认值为"any"删除含有缺失值的行,也就是只要某一行有缺失值就把这一行删除,为"all"时,只有一行或一列的所有值都为缺失值时,才进行删除
df.dropna().head()
实际价格(元) | 运费(元) | 数量 | 实际支付(元) | 状态 | 商品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()
实际价格(元) | 运费(元) | 数量 | 实际支付(元) | 状态 | 商品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 |
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)
方法对数据表中的所有缺失值进行填充,在fillna后面的括号中输入要填充的值即可
df.fillna(0).head() #将所有缺失值填充为0
实际价格(元) | 运费(元) | 数量 | 实际支付(元) | 状态 | 商品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({
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。