Pandas 综合练习

Task05:综合练习

1、端午节的淘宝粽子交易

问题
(1) 请删除最后一列为缺失值的行,并求全部在杭州发货的商品单价均值。
(2) 商品标题带有“嘉兴”但发货地却不在嘉兴的商品有多少条记录?
(3) 请按照分位数将价格分为“高、较高、中、较低、低”5 个类别,再将 类别结果插入到标题一列以后,最后对类别列进行降序排序。
(4) 付款人数一栏有缺失值吗?如有则请利用上一问的分类结果对这些缺失 值进行合理估计并填充。
(5) 请将数据后四列合并为以下格式的 Series:商品发货地为 ××,店铺为 ××,共计 ×× 人付款,单价为 ××。
(6) 请将上一问中的结果恢复成原来的四列。
python

In [1]:import pandas as pd
       import numpy as np
In [2]:df_duanwu = pd.read_csv('./练习/端午粽子数据.csv')
       df_duanwu.info()
#(1) 请删除最后一列为缺失值的行,并求全部在杭州发货的商品单价均值。
In [3]:df_zongzi = df_duanwu.copy().dropna(axis=0,subset=['发货地址 '])
       pd.to_numeric(df_01[df_zongzi['发货地址 '].str.contains('杭州')][' 价格'],errors='coerce').mean().round(decimals=2)
#(2) 商品标题带有“嘉兴”但发货地却不在嘉兴的商品有多少条记录?
In [4]:df_zongzi[(df_01['标题'].str.contains('嘉兴')) &(~df_zongzi['发货地址 '].str.contains('嘉兴'))].shape[0]
#(3) 请按照分位数将价格分为“高、较高、中、较低、低”5 个类别,再将 类别结果插入到标题一列以后,最后对类别列进行降序排序。
In [5]:df_zongzi.loc[:,' 价格'] = pd.to_numeric(df_zongzi.loc[:,' 价格'],errors='coerce')
       q = [df_zongzi.loc[:,' 价格'].quantile(i) for i in [0,.2,.4,.6,.8,1]];q[-1] += 1
df_zongzi.loc[:,'价格类别'] = pd.cut(df_zongzi[' 价格'],q,right=False,labels=['低','较低','中','较高','高'])
In [6]:df_zongzi.loc[:,['标题','价格类别', ' 价格', '付款人数', '店铺', '发货地址 ']].sort_values(by='价格类别')
#(4) 付款人数一栏有缺失值吗?如有则请利用上一问的分类结果对这些缺失 值进行合理估计并填充。
In [7]#非缺失值有 4329/4400
        df_o4 = df_zogzi.copy()
        df_04.info()
#用同价格类别的付款人数均值(不考虑100余条相似1.0万+、5000+等较大数值。)
In [8]:grouped = df_04.groupby('价格类别')
         for name,group in grouped:
         df_04.loc[group.index,'付款人数'] = str(int(pd.to_numeric(group['付款人数'].astype(str).str[:-3],errors='coerce').mean()))+'人付款'
         df_04.info()
#(5) 请将数据后四列合并为以下格式的 Series:商品发货地为 ××,店铺为 ××,共计 ×× 人付款,单价为 ××。
In [9]:df_05 = df_04.astype(str)
         df_str3 = ('商品发货地为'+df_05['发货地址 ']+',店铺为'+df_05['店铺']+',共计'+df_05['付款人数']+',单价为'+df_05[' 价格']+'。')
        df_str3.head()
#(6) 请将上一问中的结果恢复成原来的四列。
In [10]:df_res = df_str3.str.extract(r'商品发货地为(?P<发货地址>[\w]+\s*[\w]+),店铺为(?P<店铺>[\w]+),共计(?P<付款人数>[\w]+\+*[\w]+),单价为(?P<价格>[\d]+\.*[\d]+)。')
        df_res.head()