pandas 综合练习

该博客是一个pandas的综合练习案例,涉及数据清洗和分析。内容包括:删除缺失值并计算杭州发货商品的平均单价,查找标题含'嘉兴'但发货地不在嘉兴的商品数量,根据价格分位数分类,填充付款人数的缺失值,以及整理数据格式等。
摘要由CSDN通过智能技术生成

综合练习

In [1]:

import pandas as pd
import numpy as np

端午节的淘宝粽子交易

 

df  = pd.read_csv("端午粽子数据.csv").convert_dtypes()
df.head()

Out[2]:

 标题价格付款人数店铺发货地址
0五芳斋粽子礼盒 心悦+18只装咸鸭蛋组合端午节礼品团购嘉兴肉粽子1296人付款五芳斋官方旗舰店浙江 嘉兴
1北京稻香村端午粽子手工豆沙粽220g*2袋散装豆沙粽香甜软糯豆沙粽448人付款天猫超市上海
2五芳斋粽子礼盒装鲜肉咸蛋黄大肉粽嘉兴豆沙甜粽端午团购散装礼品89.9100万+人付款五芳斋官方旗舰店浙江 嘉兴
3稻香私房鲜肉粽蛋黄肉粽嘉兴粽子咸鸭蛋礼盒装端午节送礼特产团购1381936人付款稻香村食品旗舰店北京
4嘉兴粽子 蛋黄鲜肉粽新鲜大肉粽早餐散装团购浙江特产蜜枣多口味3.89500+人付款城城喂食猫浙江 嘉兴
df.info()
<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   string
 1    价格     4403 non-null   string
 2   付款人数    4332 non-null   string
 3   店铺      4403 non-null   string
 4   发货地址    4400 non-null   string
dtypes: string(5)
memory usage: 172.1 KB

(1) 请删除最后一列为缺失值的行,并求所有在杭州发货的商品单价均值。

df.columns = [i.strip() for i in df.columns]
df.columns

Out[4]:

Index(['标题', '价格', '付款人数', '店铺', '发货地址'], dtype='object')
s= pd.Series(['_45','45_','1','1.23','1.1.'],dtype='string')
s.str.extract(r'(-?[0-9]+\.*\d*)')
 

Out[5]:

 0
045
145
21
31.23
41.1
# 删除发货地址为空的行
df = df.dropna(subset=['发货地址'])
df_cal = df.copy()
df_cal['价格'] = df_cal['价格'].str.extract(r'(-?[0-9]+\.*\d*)')
df_cal['价格'] = df_cal['价格'] .astype('Float64')
df_cal[df_cal['发货地址'].isin(['浙江 杭州'])]['价格'].mean()
 

Out[6]:

80.90088888888889

(2) 商品标题带有“嘉兴”但发货地却不在嘉兴的商品有多少条记录?

df[(df['标题'].str.contains(r'嘉兴')) & (~df['发货地址'].str.contains(r'嘉兴'))].count()
 

Out[7]:

标题      1032
价格      1032
付款人数     984
店铺      1032
发货地址    1032
dtype: int64

(3) 请按照分位数将价格分为“高、较高、中、较低、低”5 个类别,再将 类别结果插入到标题一列之后,最后对类别列进行降序排序。

range_list = [0]
for i in range(2,11,2):
    range_list.append(df_cal['价格'].quantile(q=i*0.1))

df['价格类'] = pd.cut(df_cal['价格'],range_list,right=True,labels=['高', '较高', '中', '较低', '低'][::-1])
 
df.sort_values('价格类',ascending=False).head()
 

Out[9]:

 标题价格付款人数店铺发货地址价格类
0五芳斋粽子礼盒 心悦+18只装咸鸭蛋组合端午节礼品团购嘉兴肉粽子1296人付款五芳斋官方旗舰店浙江 嘉兴
847真真老老蛋黄肉粽140g*60个新鲜大肉粽冷冻方便早餐嘉兴粽子端午168139人付款tb6182109_2012上海
2773山西双合成粽子端午节送礼御粽膳坊礼盒粽叶板栗豆沙黄米杂粮粽12933人付款双合成旗舰店山西 晋中
2768采芝斋粽子甜粽新鲜蛋黄大肉粽嘉兴口味鲜肉粽子食品端午礼盒定制21647人付款采芝斋杭州专卖店浙江 杭州
2763真真老老臻瑞礼盒1.12kg/盒端午节粽子礼盒装送130g经典鲜肉粽1262人付款天猫超市上海

(4) 付款人数一栏有缺失值吗?若有则请利用上一问的分类结果对这些缺失 值进行合理估计并填充。

#查看是否有缺失
df.loc[df['付款人数'].isna()].head()

Out[10]:

 标题价格付款人数店铺发货地址价格类
183五芳斋 140g*8只大粽子 福韵端午豆沙蜜枣蛋黄粽新包装送礼礼盒50.9<NA>天猫会员店上海
243五芳斋福雅五芳粽子礼盒端午咸甜粽子绿豆糕咸鸭蛋送礼79.9<NA>天猫会员店上海较高
347【百草味】龙腾粽1090g 早餐大肉粽子湖州特产嘉兴粽39.9<NA>天猫会员店上海
386五芳斋华礼竹篮礼盒1360g蛋粽组合端午礼品嘉兴粽子礼盒129<NA>天猫会员店上海
389百草味 龙腾粽礼盒1460g 10只装早餐大肉粽子湖州特产嘉兴49.9<NA>天猫会员店上海

 

df_cal.loc[df.index,'价格类'] = df['价格类']
for name,group in df_cal.groupby('价格类'):
    # 提取付款人数的数值表达
    group['付款人数'] = pd.to_numeric(group['付款人数'].str.extract(r'([0-9]+)')[0],errors='coerce')
    
    temp = group[['付款人数','价格']].sort_values('价格').interpolate(limit_direction='both')['付款人数']
    df.loc[group.index,'付款人数'] = temp.astype('int64').astype('str').astype('string')+"人付款"
    
df.loc[df['付款人数'].isna()]
 

Out[12]:

(5) 请将数据后四列合并为如下格式的 Series:商品发货地为 ××,店铺为 ××,共计 ×× 人付款,单价为 ××。

df['detail'] = '商品发货地为'+df['发货地址']+',店铺为'+df['店铺']+',共计'+df['付款人数']+",单价为"+df['价格']
df.head()
 

Out[13]:

 标题价格付款人数店铺发货地址价格类detail
0五芳斋粽子礼盒 心悦+18只装咸鸭蛋组合端午节礼品团购嘉兴肉粽子1296人付款五芳斋官方旗舰店浙江 嘉兴商品发货地为浙江 嘉兴,店铺为五芳斋官方旗舰店,共计6人付款,单价为129
1北京稻香村端午粽子手工豆沙粽220g*2袋散装豆沙粽香甜软糯豆沙粽448人付款天猫超市上海商品发货地为上海,店铺为天猫超市,共计8人付款,单价为44
2五芳斋粽子礼盒装鲜肉咸蛋黄大肉粽嘉兴豆沙甜粽端午团购散装礼品89.9100人付款五芳斋官方旗舰店浙江 嘉兴较高商品发货地为浙江 嘉兴,店铺为五芳斋官方旗舰店,共计100人付款,单价为89.9
3稻香私房鲜肉粽蛋黄肉粽嘉兴粽子咸鸭蛋礼盒装端午节送礼特产团购1381936人付款稻香村食品旗舰店北京商品发货地为北京,店铺为稻香村食品旗舰店,共计1936人付款,单价为138
4嘉兴粽子 蛋黄鲜肉粽新鲜大肉粽早餐散装团购浙江特产蜜枣多口味3.89500人付款城城喂食猫浙江 嘉兴商品发货地为浙江 嘉兴,店铺为城城喂食猫,共计9500人付款,单价为3.8

(6) 请将上一问中的结果恢复成原来的四列。

 

new_df = pd.DataFrame(index=df.index)
new_df['发货地址'] = df['detail'].str.extract(r"商品发货地为(.+),店")
new_df['店铺'] = df['detail'].str.extract(r"店铺为(.+),共")
new_df['付款人数'] = df['detail'].str.extract(r"共计(.+),单")
new_df['价格'] = df['detail'].str.extract(r"单价为(.+)")
new_df

Out[14]:

 发货地址店铺付款人数价格
0浙江 嘉兴五芳斋官方旗舰店6人付款129
1上海天猫超市8人付款44
2浙江 嘉兴五芳斋官方旗舰店100人付款89.9
3北京稻香村食品旗舰店1936人付款138
4浙江 嘉兴城城喂食猫9500人付款3.8
...............
4398浙江 嘉兴红船旗舰店347人付款7.9
4399四川 乐山峨眉山隐栗粑粑罗栗80人付款93
4400北京北京美程嘉译5人付款98.2
4401安徽 合肥chaoge1931149人付款65.9
4402广东 东莞hezhiqi20人付款99

4400 rows × 4 columns

 

 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值