这是一个关于 pandas 从基础到进阶的练习题系列,来源于 github 上的 guipsamora/pandas_exercises 。这个项目从基础到进阶,可以检验你有多么了解 pandas。
我会挑选一些题目,并且提供比原题库更多的解决方法以及更详尽的解析。
计划每天更新一期,希望各位小伙伴先自行思考,再查看答案。如果对你有帮助,记得转发推荐给你的好友!
上期文章:pandas每天一题-题目16:条件赋值的多种方式
后台回复"数据",可以下载本题数据集
如下数据:
import pandas as pd
import numpy as np
df = pd.read_csv('chipotle.tsv',
sep='\t',
converters={'item_price': lambda x: float(x[1:-1])})
数据描述:
例如:某个单子中,客人要 1瓶可乐 和 1瓶雪碧 ,那么这个订单的 order_id 为:'xx',有2个行记录(样本),2行的item_name 都是 "Canned Soda"(苏打水,视为罐装饮料) ,quantity 都是1。
第一行的 choice_description 是 "Diet Coke"(可乐) ,第二行是 "Sprite"(雪碧)
前面章节讲解过的知识点,本文不再讲解!
需求:对数据中的缺失值做合适处理
下面是答案了
之前的文章已经有讲解过:
df.apply(
lambda col: col.isna().sum(),
axis=0)
最简单的方式,把 nan 都填充一个固定的值:
df['choice_description'].fillna('无')
显然,这只是返回填充后的列,因此我们把新值赋值回去:
df['choice_description'] = df['choice_description'].fillna('无')
df
除此之外,还可以使用空值上一行或下一行的值来填充:
df = pd.read_csv('chipotle.tsv',
sep='\t',
converters={'item_price': lambda x: float(x[1:-1])})
df['choice_description'].fillna(method='ffill')
显然,直接前向或后向填充,通常没有意义。
篇幅关系,我把分组填充缺失值放到下一节
推荐阅读: