问题 (1) 请删除最后一列为缺失值的行,并求所有在杭州发货的商品单价均值。 (2) 商品标题带有“嘉兴”但发货地却不在嘉兴的商品有多少条记录? (3) 请按照分位数将价格分为“高、较高、中、较低、低”5 个类别,再将 类别结果插入到标题一列之后,最后对类别列进行降序排序。 (4) 付款人数一栏有缺失值吗?若有则请利用上一问的分类结果对这些缺失 值进行合理估计并填充。 (5) 请将数据后四列合并为如下格式的 Series:商品发货地为 ××,店铺为 ××,共计 ×× 人付款,单价为 ××。 (6) 请将上一问中的结果恢复成原来的四列。
In [1]:import pandas as pd import numpy as np In [2]:df_duanwu = pd.read_csv('./练习/端午粽子数据.csv') df_duanwu.info() #(1) 请删除最后一列为缺失值的行,并求所有在杭州发货的商品单价均值。 In [3]:df_zongzi = df_duanwu.copy().dropna(axis=0,subset=['发货地址 ']) pd.to_numeric(df_01[df_zongzi['发货地址 '].str.contains('杭州')][' 价格'],errors='coerce').mean().round(decimals=2) #(2) 商品标题带有“嘉兴”但发货地却不在嘉兴的商品有多少条记录? In [4]:df_zongzi[(df_01['标题'].str.contains('嘉兴')) &(~df_zongzi['发货地址 '].str.contains('嘉兴'))].shape[0] #(3) 请按照分位数将价格分为“高、较高、中、较低、低”5 个类别,再将 类别结果插入到标题一列之后,最后对类别列进行降序排序。 In [5]:df_zongzi.loc[:,' 价格'] = pd.to_numeric(df_zongzi.loc[:,' 价格'],errors='coerce') q = [df_zongzi.loc[:,' 价格'].quantile(i) for i in [0,.2,.4,.6,.8,1]];q[-1] += 1 df_zongzi.loc[:,'价格类别'] = pd.cut(df_zongzi[' 价格'],q,right=False,labels=['低','较低','中','较高','高']) In [6]:df_zongzi.loc[:,['标题','价格类别', ' 价格', '付款人数', '店铺', '发货地址 ']].sort_values(by='价格类别') #(4) 付款人数一栏有缺失值吗?若有则请利用上一问的分类结果对这些缺失 值进行合理估计并填充。 In [7]#非缺失值有 4329/4400 df_o4 = df_zogzi.copy() df_04.info() #用同价格类别的付款人数均值(不考虑100余条类似1.0万+、5000+等较大数值。) In [8]:grouped = df_04.groupby('价格类别') for name,group in grouped: df_04.loc[group.index,'付款人数'] = str(int(pd.to_numeric(group['付款人数'].astype(str).str[:-3],errors='coerce').mean()))+'人付款' df_04.info() #(5) 请将数据后四列合并为如下格式的 Series:商品发货地为 ××,店铺为 ××,共计 ×× 人付款,单价为 ××。 In [9]:df_05 = df_04.astype(str) df_str3 = ('商品发货地为'+df_05['发货地址 ']+',店铺为'+df_05['店铺']+',共计'+df_05['付款人数']+',单价为'+df_05[' 价格']+'。') df_str3.head() #(6) 请将上一问中的结果恢复成原来的四列。 In [10]:df_res = df_str3.str.extract(r'商品发货地为(?P<发货地址>[\w]+\s*[\w]+),店铺为(?P<店铺>[\w]+),共计(?P<付款人数>[\w]+\+*[\w]+),单价为(?P<价格>[\d]+\.*[\d]+)。') df_res.head()