参考脚本及数据来源于:https://www.kesci.com/home/project/59e77a636d213335f38daec2
脚本均在jupyter notebook中运行。
1. 导库
import pandas as pd
2. 导入数据
chipo = pd.read_csv(r'C:\pandas\pandas_exercise\exercise_data\chipotle.csv')
脚本中使用的操作符"r" 是使计算机按字面意思理解"r"后面的字符串,所以此处" \ "并不是转义字符。
3. 查看前五行内容
chipo.head(6)
前五行的结果:
4. 查看数据有多少列
chipo.shape # (4622, 5)
查看列数:
chipo.shape[1] # 5
5. 打印所有的列名称
chipo.columns # Index(['order_id', 'quantity', 'item_name', 'choice_description','item_price'], dtype='object')
6. 查看数据集的索引
chipo.index # RangeIndex(start=0, stop=4622, step=1)
从零开始,到4622终止,应该是从第0行至第4621行含有数据集。
7. 找下单最多的商品
c = chipo[['item_name','quantity']].groupby(['item_name']).agg({'quantity':sum})
groupby函数在这里是将数按照item_name进行分组,然后计算每个item_name的quantity的总和,最后用agg函数将每个item_name和sum(quantity)组成的多个DataFrame进行组合。
c = chipo[['item_name','quantity']].groupby(['item_name'],as_index=False)
c = c['quantity'].agg(sum)
goupby函数详细信息参考:https://www.tutorialspoint.com/python_pandas/python_pandas_groupby.htm
此外,变量as_index默认是True,表示不显示索引项。
接着:
c.sort_values(['quantity'],ascending=False,inplace=True)
c.head()
sort_values函数是根据指定的行进行排列,用法如下:
DataFrame.sort_values(by=‘##’,axis=0,ascending=True, inplace=False, na_position=‘last’)
在这个脚本中,是根据’quantity’列,以降序进行排列,并且排序后的数据集代替原来的数据集。
结果:
8. 在item_name列中有多少种商品被下单
chipo['item_name'].nunique() # 50
unnique函数是返回某一列不重复项的个数,该脚本表示item_name中有50个不同的商品。
9.下单最多的商品是什么
chipo['choice_description'].value_counts().head()
value_count函数是计算指定列中有哪些不同的值,并计算每个值有多少重复值,默认从高到低排序。
结果:
10. 一共有多少下单了多少商品
total_items_orders = chipo['quantity'].sum()
total_items_orders # 4972
11. 将item_price转化成浮点数
dollarizer = lambda x: float(x)
chipo['item_price'] = chipo['item_price'].apply(dollarizer)
print(chipo[['item_price']].head())
lambda函数是定义匿名函数,此句脚本是指将x转化成浮点数。
apply函数用法:DataFrame.apply(func, axis=0, broadcast=False, raw=False, reduce=None, args=(), **kwds),apply函数会遍历每一行数据,然后将最终的结果组合成Series结构返回。
结果:
12. 求总收入是多少
chipo['sub_total'] = round(chipo['item_price'] * chipo['quantity'],2)
chipo['sub_total'].sum() # 39237.02
round()函数是将浮点数四舍五入并返回该值,用法如下:
round(x, n),即n为保留的小数点后的个数。
并且该脚本将’sub_total’这一列添加到了数据集中。
13. 计算一共有多少订单
chipo['order_id'].nunique() # 1834
14. 每一单对应的平均总价
chipo[['order_id','sub_total']].groupby(by=['order_id']).agg({'sub_total':'sum'})['sub_total'].mean() # 21.394231188658654
该句脚本可以换成:
y = chipo[['order_id','sub_total']].groupby(by=['order_id']).agg({'sub_total':'sum'})
x = y['sub_total'].mean()
print(x) # 21.394231188658654
15. 计算一共有多少种不同的商品出售
chipo['item_name'].nunique() # 50