在收集数据的时候常常会遇到数据缺失,可能由于漏填,可能由于传感器故障,也可能就是逻辑上应该的(比如未婚女生问卷上先生一栏肯定是空出来的缺失值)。不管如何缺失值需要在进一步数据分析前要进行相应的处理。
本节处理缺失值采用了以下几个方案:
小呆被交代一项任务,统计一下这个星期各个洗发露的销量,小呆打开营销同事的记录本shampoo_sales.csv,看到
shampoo_sales.csv
品牌,日期,销量
沙宣,星期一,200
沙宣,星期二,185
沙宣,星期三,
沙宣,星期四,210
沙宣,星期五,201
沙宣,星期六,223
沙宣,星期日,195
欸,星期三的销量怎么没有了,可能是销售人员忘填了吧,算了先导入再说,于是写下代码
import pandas as pd
sales = pd.read_csv('shampoo_sales.csv', encoding = 'gb2312')
sl2 = sales.set_index(['品牌', '日期']).unstack()
print(sl2)
结果如下:
销量
日期 星期一 星期二 星期三 星期四 星期五 星期六 星期日
品牌
沙宣 200.0 185.0 NaN 210.0 201.0 223.0 195.0
这个星期三的销量是缺失的,怎么办?要不就删除了吧,于是小呆写下代码
sl3 = sl2.dropna()
print(sl3)
结果如下:
销量
日期 星期一 星期二 星期四 星期五 星期六 星期日
品牌
沙宣 200.0 185.0 210.0 201.0 223.0 195.0
好像缺少了星期三也怪怪的,那这个星期三的缺失值应该怎么补呢?小呆有点犯难,要不拿去年的日销量补一下,小呆写下代码
sl2[sl2.isna()] = 100
print(sl2)
结果如下:
销量
日期 星期一 星期二 星期三 星期四 星期五 星期六 星期日
品牌
沙宣 200.0 185.0 100.0 210.0 201.0 223.0 195.0
这好像差别有点大啊,对了,这周在搞促销,看来用去年的日销量好像不太对,那要不就用这周的平均数吧,于是小呆把上面两行代码删掉,重新写下代码
sl2[sl2.isna()] = sales.dropna().mean()['销量']
print(sl2)
结果如下:
销量
日期 星期一 星期二 星期三 星期四 星期五 星期六 星期日
品牌
沙宣 200.0 185.0 202.333333 210.0 201.0 223.0 195.0
嗯,这样看起来差不多了,于是小呆把整理好的结果交了上去。
文章导引列表:
机器学习
数据分析
数据可视化