pandas 综合练习

    技术2022-07-11  88

    综合练习

    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]:

     00451452131.2341.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]:

     标题价格付款人数店铺发货地址价格类detail0五芳斋粽子礼盒 心悦+18只装咸鸭蛋组合端午节礼品团购嘉兴肉粽子1296人付款五芳斋官方旗舰店浙江 嘉兴高商品发货地为浙江 嘉兴,店铺为五芳斋官方旗舰店,共计6人付款,单价为1291北京稻香村端午粽子手工豆沙粽220g*2袋散装豆沙粽香甜软糯豆沙粽448人付款天猫超市上海中商品发货地为上海,店铺为天猫超市,共计8人付款,单价为442五芳斋粽子礼盒装鲜肉咸蛋黄大肉粽嘉兴豆沙甜粽端午团购散装礼品89.9100人付款五芳斋官方旗舰店浙江 嘉兴较高商品发货地为浙江 嘉兴,店铺为五芳斋官方旗舰店,共计100人付款,单价为89.93稻香私房鲜肉粽蛋黄肉粽嘉兴粽子咸鸭蛋礼盒装端午节送礼特产团购1381936人付款稻香村食品旗舰店北京高商品发货地为北京,店铺为稻香村食品旗舰店,共计1936人付款,单价为1384嘉兴粽子 蛋黄鲜肉粽新鲜大肉粽早餐散装团购浙江特产蜜枣多口味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人付款1291上海天猫超市8人付款442浙江 嘉兴五芳斋官方旗舰店100人付款89.93北京稻香村食品旗舰店1936人付款1384浙江 嘉兴城城喂食猫9500人付款3.8...............4398浙江 嘉兴红船旗舰店347人付款7.94399四川 乐山峨眉山隐栗粑粑罗栗80人付款934400北京北京美程嘉译5人付款98.24401安徽 合肥chaoge1931149人付款65.94402广东 东莞hezhiqi20人付款99

    4400 rows × 4 columns

     

     
    Processed: 0.011, SQL: 9