综合练习

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

import pandas as pd
import numpy as np
df1 = pd.read_csv('zongzi.csv')
df1.head()
标题价格付款人数店铺发货地址
0五芳斋粽子礼盒 心悦+18只装咸鸭蛋组合端午节礼品团购嘉兴肉粽子1296人付款五芳斋官方旗舰店浙江 嘉兴
1北京稻香村端午粽子手工豆沙粽220g*2袋散装豆沙粽香甜软糯豆沙粽448人付款天猫超市上海
2五芳斋粽子礼盒装鲜肉咸蛋黄大肉粽嘉兴豆沙甜粽端午团购散装礼品89.9100万+人付款五芳斋官方旗舰店浙江 嘉兴
3稻香私房鲜肉粽蛋黄肉粽嘉兴粽子咸鸭蛋礼盒装端午节送礼特产团购1381936人付款稻香村食品旗舰店北京
4嘉兴粽子 蛋黄鲜肉粽新鲜大肉粽早餐散装团购浙江特产蜜枣多口味3.89500+人付款城城喂食猫浙江 嘉兴

问题

(1) 请删除最后一列为缺失值的行,并求所有在杭州发货的商品单价均值。
df1.columns
Index(['标题', ' 价格', '付款人数', '店铺', '发货地址 '], dtype='object')
df1 = df1.dropna(subset=['发货地址 '])
#去除无效值
def inval(x):
    try:
        float(x)
        return True
    except:
        return False
def to_val(x):
    return float(x)
df1[' 价格'] = df1[df1[' 价格'].map(inval)][' 价格'].map(to_val)
df1[df1['发货地址 '].isin(['浙江 杭州'])].mean()
 价格    81.101453
dtype: float64
(2) 商品标题带有“嘉兴”但发货地却不在嘉兴的商品有多少条记录?
df0 = df1[df1['发货地址 '].map(lambda x:True if '嘉兴'not in x else False)]
df0[df0['标题'].map(lambda x:True if '嘉兴' in x else False)].shape[0]
1032
(3) 请按照分位数将价格分为“高、较高、中、较低、低”5 个类别,再将 类别结果插入到标题一列之后,最后对类别列进行降序排序。
df1 = df1.dropna(subset=[' 价格','发货地址 '])
qcut = pd.qcut(df1[' 价格'],5)
df1.loc[:,'类别'] = qcut.cat.rename_categories([i for i in ['低','较低','中','较高','高']])
df1 = df1[['标题','类别', ' 价格', '付款人数', '店铺', '发货地址 ']].sort_values('类别',ascending=False)
df1.head()
标题类别价格付款人数店铺发货地址
0五芳斋粽子礼盒 心悦+18只装咸鸭蛋组合端午节礼品团购嘉兴肉粽子129.06人付款五芳斋官方旗舰店浙江 嘉兴
3523印象昆韵新品昆曲文化创意端午节胚芽糙米手工肉粽子端阳礼品礼盒156.021人付款印象昆韵江苏 苏州
3548锦华粽子瑞阳祥礼端午节礼盒新鲜嘉兴肉素六粒粽蛋卷组合送人礼品110.636人付款北京咏逢礼信商贸有限公司北京
3547礼券星巴克粽子券提货卡配送券星冰粽冰逸冰尚端午送礼品全国通用158.0122人付款嘉谷食品专营店北京
1472广州陶陶居酒家九子连环肇庆裹蒸粽鲍鱼瑶柱海鲜粽咸肉粽子团购218.05人付款祁臻堂小马哥广东 广州
(4) 付款人数一栏有缺失值吗?若有则请利用上一问的分类结果对这些缺失 值进行合理估计并填充。
df1[df1['付款人数'].isnull()].shape[0]
71

有缺失值

df1['付款人数'].map(replace)interpolate()
0           6.0
3523       21.0
3548       36.0
3547      122.0
1472        5.0
1474       53.0
1476       76.0
1480       40.0
1484       34.0
3539        9.0
1488        3.0
3535        9.0
1500       63.0
1506       26.0
3527       12.0
1509       57.0
1515      172.0
1468       90.0
3520        9.0
1541       20.0
1553       56.0
3513        2.0
1557      123.0
3510        4.0
1564      107.0
1567       16.0
1573       34.0
1580      971.0
3499        4.0
1582       44.0
         ...   
3682      132.0
3160      126.0
1123      132.0
2368      391.0
3680      122.0
3677       26.0
3676       80.0
3675       36.0
2365       85.0
3674      556.0
3686       23.0
2377      291.0
1159     3397.0
1154      511.0
1124       46.0
3152      351.0
1126      337.0
1127      323.0
1128      309.0
3708       88.0
1131      195.0
3153       38.0
3707      260.0
3706      234.0
3154      210.0
3700       48.0
3698       30.0
3697      988.0
3155    15000.0
1025      641.0
Name: 付款人数, Length: 4398, dtype: float64
df1['付款人数'].map(replace).interpolate
df1['付款人数'].map(replace)interpolate
df1['付款人数'].interpolate
def replace(x):
    try:
        x = str(x)
        if '万' in x:
            i = x.index('万')
            return float(x[:i])*10000
        if '+'in x:
            i = x.index('+')
        elif '人'in x:
            i = x.index('人')
        else:
            return None
        return int(x[:i])
    except:
        print(x)
        return None
df1['付款人数'] = df1['付款人数'].map(replace)
df1 = df1.set_index(' 价格')
df1['付款人数'] = df1['付款人数'].interpolate(method='index')
df1.columns
Index(['标题', '类别', '付款人数', '店铺', '发货地址 '], dtype='object')
df1 = df1.reset_index().loc[:,['标题', '类别',' 价格', '付款人数', '店铺', '发货地址 ']]
(5) 请将数据后四列合并为如下格式的 Series:商品发货地为 ××,店铺为 ××,共计 ×× 人付款,单价为 ××。
df1.columns
Index(['标题', '类别', ' 价格', '付款人数', '店铺', '发货地址 '], dtype='object')
s = '商品发货地为' + df1[ '发货地址 ']+',店铺为'+df1['店铺']+',共计'+ df1[ '付款人数'].map(int).map(str)+'人付款,单价为'+df1[' 价格'].map(str)+'元'
s.head()
0      商品发货地为浙江 嘉兴,店铺为五芳斋官方旗舰店,共计6人付款,单价为129.0元
1         商品发货地为江苏 苏州,店铺为印象昆韵,共计21人付款,单价为156.0元
2    商品发货地为北京,店铺为北京咏逢礼信商贸有限公司,共计36人付款,单价为110.6元
3        商品发货地为北京,店铺为嘉谷食品专营店,共计122人付款,单价为158.0元
4        商品发货地为广东 广州,店铺为祁臻堂小马哥,共计5人付款,单价为218.0元
dtype: object
(6) 请将上一问中的结果恢复成原来的四列。
s = s.str.split(',',expand=True).rename(columns={0:'发货地',1:'店铺',2:'付款人数',3:'价格'})
s['发货地'] = s['发货地'].map(lambda x:x[3:])
s['店铺'] = s['店铺'].map(lambda x:x[3:])
s['付款人数'] = s['付款人数'].map(lambda x:x[2:])
s['价格'] = s['价格'].map(lambda x:x[3:])
s.head()
发货地店铺付款人数价格
0货地为浙江 嘉兴五芳斋官方旗舰店6人付款129.0元
1货地为江苏 苏州印象昆韵21人付款156.0元
2货地为北京北京咏逢礼信商贸有限公司36人付款110.6元
3货地为北京嘉谷食品专营店122人付款158.0元
4货地为广东 广州祁臻堂小马哥5人付款218.0元
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值