一、端午节的淘宝粽子交易
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元