一、端午節的淘寶糉子交易
剛剛考完試來做題做了一晚上一道題都沒做完全,先提交打卡了,後面再慢慢補。
問題 (1) 請刪除最後一列爲缺失值的行,並求所有在杭州發貨的商品單價均值。
import pandas as pd
import numpy as np
df = pd.read_csv(r'data\端午糉子數據.csv')
df.head()
|
標題 |
價格 |
付款人數 |
店鋪 |
發貨地址 |
0 |
五芳齋糉子禮盒 心悅+18只裝鹹鴨蛋組合端午節禮品團購嘉興肉糉子 |
129 |
6人付款 |
五芳齋官方旗艦店 |
浙江 嘉興 |
1 |
北京稻香村端午糉子手工豆沙糉220g*2袋散裝豆沙糉香甜軟糯豆沙糉 |
44 |
8人付款 |
天貓超市 |
上海 |
2 |
五芳齋糉子禮盒裝鮮肉鹹蛋黃大肉糉嘉興豆沙甜糉端午團購散裝禮品 |
89.9 |
100萬+人付款 |
五芳齋官方旗艦店 |
浙江 嘉興 |
3 |
稻香私房鮮肉糉蛋黃肉糉嘉興糉子鹹鴨蛋禮盒裝端午節送禮特產團購 |
138 |
1936人付款 |
稻香村食品旗艦店 |
北京 |
4 |
嘉興糉子 蛋黃鮮肉糉新鮮大肉糉早餐散裝團購浙江特產蜜棗多口味 |
3.8 |
9500+人付款 |
城城餵食貓 |
浙江 嘉興 |
df.info()
df.columns
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 4403 entries, 0 to 4402
Data columns (total 5 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 標題 4403 non-null object
1 價格 4403 non-null object
2 付款人數 4332 non-null object
3 店鋪 4403 non-null object
4 發貨地址 4400 non-null object
dtypes: object(5)
memory usage: 172.1+ KB
Index(['標題', ' 價格', '付款人數', '店鋪', '發貨地址 '], dtype='object')
df.columns = df.columns.str.strip()
df[df['發貨地址'].isna()]
|
標題 |
價格 |
付款人數 |
店鋪 |
發貨地址 |
1847 |
貞豐胖四娘灰糉傳統肉糉真空板栗鮮肉糉方便速食端午貴州糉子5只 |
46.8 |
41人付款 |
貴州原產地商品官方旗艦店 |
NaN |
2418 |
素繽紛糉子140g*6入袋裝淨素素食純素蔬食素糉早餐點心端午送禮 |
49.4 |
40人付款 |
素繽紛精緻素食自助式餐廳 |
NaN |
2716 |
辰頤物語熱銷嘉興私房糉子10只禮盒裝6味大糉葷素搭配送禮可團購 |
39.9 |
110人付款 |
水果達人多喫水果有益健康 |
NaN |
df.dropna(axis=0,subset=['發貨地址'],inplace=True)
df[df['發貨地址'].isna()]
df[df['發貨地址'].str.contains(r'杭州')]
|
標題 |
價格 |
付款人數 |
店鋪 |
發貨地址 |
15 |
【百草味-經典龍騰糉1460g】蛋黃肉甜糉子特產嘉興糉端午整箱禮盒 |
78 |
2372人付款 |
百草味旗艦店 |
浙江 杭州 |
26 |
知味觀端午節糉子甜糉鹹蛋黃大肉糉禮盒裝嘉興味鮮肉糉子散裝團購 |
64.9 |
8.5萬+人付款 |
知味觀官方旗艦店 |
浙江 杭州 |
53 |
知味觀龍飛糉舞端午節糉子禮盒裝禮品嘉興口味鮮肉糉子綠豆糕團購 |
88 |
1355人付款 |
知味觀官方旗艦店 |
浙江 杭州 |
71 |
知味觀風俗志端午節糉子禮盒裝送禮蛋黃鮮肉糉甜糉綠豆糕禮品團購 |
158 |
1333人付款 |
知味觀官方旗艦店 |
浙江 杭州 |
89 |
知味觀糉子新鮮大肉糉手工嘉興口味鮮肉糉子懶人食品散裝早餐速食 |
52.9 |
7500+人付款 |
知味觀官方旗艦店 |
浙江 杭州 |
... |
... |
... |
... |
... |
... |
4355 |
知味觀糉樂樂糉子禮盒裝大肉糉蛋黃鮮肉糉豆沙甜糉嘉興口味團購 |
79.9 |
21人付款 |
杭州知味觀 |
浙江 杭州 |
4364 |
網易嚴選五彩纏角糉 中國糉禮盒裝 1.2千克 糉子蛋黃肉糉真空新鮮 |
109 |
3人付款 |
網易嚴選美食館 |
浙江 杭州 |
4375 |
妙維根板栗淨素糉糙米藜麥全素糉子無糖低卡低gi代餐無油低脂飽腹 |
11.99 |
42人付款 |
xutong2080 |
浙江 杭州 |
4376 |
東方賀禮端午節禮盒嘉興糉子高湯蛋黃鮮大肉糉特產現已支持定製 |
45_ |
17人付款 |
緣來有禮 |
浙江 杭州 |
4397 |
知味觀家鄉知味糉子禮盒裝端午節禮品杭州特產鴨蛋大禮包送禮福利 |
82 |
7人付款 |
韓麗麗92 |
浙江 杭州 |
180 rows × 5 columns
df[df['發貨地址'].str.contains(r'杭州')].價格.astype('float').mean()
80.90088888888877
(2) 商品標題帶有“嘉興”但發貨地卻不在嘉興的商品有多少條記錄?
df[df['標題'].str.contains(r'嘉興')&(~df['發貨地址'].str.contains(r'嘉興'))]
|
標題 |
價格 |
付款人數 |
店鋪 |
發貨地址 |
3 |
稻香私房鮮肉糉蛋黃肉糉嘉興糉子鹹鴨蛋禮盒裝端午節送禮特產團購 |
138 |
1936人付款 |
稻香村食品旗艦店 |
北京 |
6 |
五芳齋華禮竹籃禮盒1360g蛋糉組合端午禮品嘉興糉子禮盒 |
159 |
1028人付款 |
天貓超市 |
上海 |
8 |
真真老老嘉情禮盒10糉6蛋1.52kg/盒嘉興糉子端午節糉子禮盒裝 |
109 |
2117人付款 |
天貓超市 |
上海 |
9 |
五芳齋嘉興糉子新鮮量販蛋黃肉糉豆沙糉悅喜散裝端午特產600g*2袋 |
59.9 |
1349人付款 |
天貓超市 |
上海 |
10 |
真真老老糉子臻芯800g/盒*1端午節禮盒裝嘉興特產送禮 |
75 |
1815人付款 |
天貓超市 |
上海 |
... |
... |
... |
... |
... |
... |
4377 |
超港端午糉子肉糉蜜棗糉大肉棕子黃山特產禮盒新鮮嘉興糉子肉糉 |
39.9 |
67人付款 |
超港旗艦店 |
安徽 黃山 |
4383 |
真真老老真情糉子鹹蛋禮盒嘉興特產肉糉豆沙甜棗糉端午節團購批發 |
79.9 |
10人付款 |
曈寶食品專營店 |
上海 |
4386 |
臻味德嘉興糉子竹籃禮盒裝農家手工蛋黃鮮肉棕甜糉端午節伴手禮品 |
49.08 |
2人付款 |
氣泡西柚屋 |
浙江 溫州 |
4393 |
傅太糉子10只蛋黃肉糉鮮肉糉嘉興風味肉糉子即食早餐端午團購 |
60.2 |
46人付款 |
love侯氏 |
江西 萍鄉 |
4401 |
【粉絲專享】端午節特產新鮮蛋黃鮮肉糉豆沙嘉興糉子800g/箱 |
65.9 |
149人付款 |
chaoge1931 |
安徽 合肥 |
1032 rows × 5 columns
df[df['標題'].str.contains(r'嘉興')&(~df['發貨地址'].str.contains(r'嘉興'))].count()
標題 1032
價格 1032
付款人數 984
店鋪 1032
發貨地址 1032
dtype: int64
(3) 請按照分位數將價格分爲“高、較高、中、較低、低”5 個類別,再將 類別結果插入到標題一列之後,最後對類別列進行降序排序。
def is_number(x):
try:
float(x)
return True
except:
return False
df[~df.價格.map(is_number)]
|
標題 |
價格 |
付款人數 |
店鋪 |
發貨地址 |
538 |
五芳齋糉子蛋黃鮮肉糉豆沙糉栗子肉棕子新鮮散裝批發團購嘉興肉糉 |
45.9. |
1.0萬+人付款 |
五芳齋官方旗艦店 |
浙江 嘉興 |
4376 |
東方賀禮端午節禮盒嘉興糉子高湯蛋黃鮮大肉糉特產現已支持定製 |
45_ |
17人付款 |
緣來有禮 |
浙江 杭州 |
df.loc[[538,4376],'價格'] = [45.9,45]
df[~df.價格.map(is_number)]
df['價格']=df['價格'].astype('float')
df['類別'] = pd.qcut(df.價格,[0,0.2,0.4,0.6,0.8,1.],labels=['低','較低','中','較高','高'])
df.head()
|
標題 |
價格 |
付款人數 |
店鋪 |
發貨地址 |
類別 |
0 |
五芳齋糉子禮盒 心悅+18只裝鹹鴨蛋組合端午節禮品團購嘉興肉糉子 |
129.0 |
6人付款 |
五芳齋官方旗艦店 |
浙江 嘉興 |
高 |
1 |
北京稻香村端午糉子手工豆沙糉220g*2袋散裝豆沙糉香甜軟糯豆沙糉 |
44.0 |
8人付款 |
天貓超市 |
上海 |
中 |
2 |
五芳齋糉子禮盒裝鮮肉鹹蛋黃大肉糉嘉興豆沙甜糉端午團購散裝禮品 |
89.9 |
100萬+人付款 |
五芳齋官方旗艦店 |
浙江 嘉興 |
較高 |
3 |
稻香私房鮮肉糉蛋黃肉糉嘉興糉子鹹鴨蛋禮盒裝端午節送禮特產團購 |
138.0 |
1936人付款 |
稻香村食品旗艦店 |
北京 |
高 |
4 |
嘉興糉子 蛋黃鮮肉糉新鮮大肉糉早餐散裝團購浙江特產蜜棗多口味 |
3.8 |
9500+人付款 |
城城餵食貓 |
浙江 嘉興 |
低 |
df.sort_values(by='類別',ascending=False)
|
標題 |
價格 |
付款人數 |
店鋪 |
發貨地址 |
類別 |
0 |
五芳齋糉子禮盒 心悅+18只裝鹹鴨蛋組合端午節禮品團購嘉興肉糉子 |
129.00 |
6人付款 |
五芳齋官方旗艦店 |
浙江 嘉興 |
高 |
847 |
真真老老蛋黃肉糉140g*60個新鮮大肉糉冷凍方便早餐嘉興糉子端午 |
168.00 |
139人付款 |
tb6182109_2012 |
上海 |
高 |
2773 |
山西雙合成糉子端午節送禮御糉膳坊禮盒糉葉板栗豆沙黃米雜糧糉 |
129.00 |
33人付款 |
雙合成旗艦店 |
山西 晉中 |
高 |
2768 |
採芝齋糉子甜糉新鮮蛋黃大肉糉嘉興口味鮮肉糉子食品端午禮盒定製 |
216.00 |
47人付款 |
採芝齋杭州專賣店 |
浙江 杭州 |
高 |
2763 |
真真老老臻瑞禮盒1.12kg/盒端午節糉子禮盒裝送130g經典鮮肉糉 |
126.00 |
2人付款 |
天貓超市 |
上海 |
高 |
... |
... |
... |
... |
... |
... |
... |
3637 |
新鮮糉葉包糉子的葉子幹糉子葉大號竹子葉竹葉葦葉皮大鮮糉葉幹種 |
4.00 |
617人付款 |
海倪食品專營店 |
廣東 廣州 |
低 |
2129 |
嘉興五芳齋糉子 真空100克*2只紫米慄蓉糉端午節甜糉子 |
11.00 |
2897人付款 |
五芳齋官方旗艦店 |
浙江 嘉興 |
低 |
2130 |
三珍齋蛋黃糉200g真空100g*2只嘉興特產糉子速食早餐 |
7.88 |
NaN |
天貓會員店 |
上海 |
低 |
2131 |
俏香閣經典鮮肉糉子120g*2只端午節嘉興特產速食早餐點心 |
5.90 |
NaN |
天貓會員店 |
上海 |
低 |
2916 |
甜糉子蜜棗糉端午送人禮品豆沙糉紅豆赤豆糉方便早餐素棕散裝團購 |
21.90 |
230人付款 |
集採食品專營店 |
浙江 嘉興 |
低 |
4400 rows × 6 columns
(4) 付款人數一欄有缺失值嗎?若有則請利用上一問的分類結果對這些缺失 值進行合理估計並填充。
df[df.付款人數.isnull()].head()
|
標題 |
價格 |
付款人數 |
店鋪 |
發貨地址 |
類別 |
183 |
五芳齋 140g*8只大糉子 福韻端午豆沙蜜棗蛋黃糉新包裝送禮禮盒 |
50.9 |
NaN |
天貓會員店 |
上海 |
中 |
243 |
五芳齋福雅五芳糉子禮盒端午鹹甜糉子綠豆糕鹹鴨蛋送禮 |
79.9 |
NaN |
天貓會員店 |
上海 |
較高 |
347 |
【百草味】龍騰糉1090g 早餐大肉糉子湖州特產嘉興糉 |
39.9 |
NaN |
天貓會員店 |
上海 |
中 |
386 |
五芳齋華禮竹籃禮盒1360g蛋糉組合端午禮品嘉興糉子禮盒 |
129.0 |
NaN |
天貓會員店 |
上海 |
高 |
389 |
百草味 龍騰糉禮盒1460g 10只裝早餐大肉糉子湖州特產嘉興 |
49.9 |
NaN |
天貓會員店 |
上海 |
中 |
s1=df[df.付款人數.notna()].付款人數
s1.astype('string')
0 6人付款
1 8人付款
2 100萬+人付款
3 1936人付款
4 9500+人付款
...
4398 347人付款
4399 80人付款
4400 5人付款
4401 149人付款
4402 20人付款
Name: 付款人數, Length: 4329, dtype: string
s12=s1[s1.str.contains(r'萬')].str.extract(r'(\d+.?\d+?)萬')
s12
|
0 |
2 |
100 |
11 |
2.0 |
14 |
70 |
26 |
8.5 |
36 |
10 |
... |
... |
1333 |
1.0 |
1646 |
1.5 |
1756 |
7.0 |
3155 |
1.5 |
3468 |
2.0 |
65 rows × 1 columns
s12=s12.astype('float')*10000
s12.head()
|
0 |
2 |
1000000.0 |
11 |
20000.0 |
14 |
700000.0 |
26 |
85000.0 |
36 |
100000.0 |
s13=s1[~s1.str.contains(r'萬')].str.split('人付款',expand=True)[0].str.replace(r'\s+','').str.replace(r'+','').astype('int')
s13
0 6
1 8
3 1936
4 9500
5 17
...
4398 347
4399 80
4400 5
4401 149
4402 20
Name: 0, Length: 4264, dtype: int32
len(s1)==len(s12)+len(s13)
True
s = pd.concat([s13,s12])
s.name = '付款人數'
s.head()
|
0 |
0 |
6.0 |
1 |
8.0 |
3 |
1936.0 |
4 |
9500.0 |
5 |
17.0 |
df2=df[df.付款人數.notna()][['類別','付款人數']].copy()
df2.update(s)
df2
|
類別 |
付款人數 |
0 |
高 |
6人付款 |
1 |
中 |
8人付款 |
2 |
較高 |
100萬+人付款 |
3 |
高 |
1936人付款 |
4 |
低 |
9500+人付款 |
... |
... |
... |
4398 |
低 |
347人付款 |
4399 |
較高 |
80人付款 |
4400 |
較高 |
5人付款 |
4401 |
較高 |
149人付款 |
4402 |
較高 |
20人付款 |
4329 rows × 2 columns
df2
|
類別 |
付款人數 |
0 |
高 |
6人付款 |
1 |
中 |
8人付款 |
2 |
較高 |
100萬+人付款 |
3 |
高 |
1936人付款 |
4 |
低 |
9500+人付款 |
... |
... |
... |
4398 |
低 |
347人付款 |
4399 |
較高 |
80人付款 |
4400 |
較高 |
5人付款 |
4401 |
較高 |
149人付款 |
4402 |
較高 |
20人付款 |
4329 rows × 2 columns