目录
一:需求描述
二:代码实现
三:注意事项
一:需求描述
最近运营那边给到一个excel表格,是一个小程序用户的下单数据,要以商品为维度,统计用户下单情况,主要是下单的商品总金额,单数和总单数。
给到的表格数据如下:
考虑用pandas实现,pandas提供了大量的数据处理函数,可以进行各种复杂的数据处理,包括数据清洗、数据转换、数据聚合等。使用pandas先对商品进行去重,然后循环商品,找出所有下单的人,再对下单人进行去重,按照商品-下单人作为关联条件进行统计金额,单数
最终实现的表格数据如下:
这里出现一个问题,由于给的表格存在金额数据为空的数据,在pandas中,可以使用fillna()方法对DataFrame中的空值进行处理。fillna()方法可以接受一个参数,用于指定如何填充空值。这样我金把额填充为0,这样出现的情况就是只要存在下单人就算一单,不管金额。还有其中情况是把金额为空的用户去除,在pandas中,可以使用dropna(inplace=True)删除含有空值的行,这样只会统计有下单金额的用户数据。
二:代码实现
首先要需要确保已经安装了pandas库。如果尚未安装,可以使用以下命令进行安装:
pip install pandas
代码编写:
import pandas as pd dir = 'D://python/' df=pd.read_excel(dir+'test.csv')#这个会直接默认读取到这个Excel的第一个表单 dic,label = [],('下单人','商品','金额','单数','总数') #删除空值 df.dropna(inplace=True) #把金额为空的填充0 #df.金额.fillna(0, inplace = True) #print(df) for 商品 in df.商品.unique(): 下单人 = df[df.商品 == 商品].下单人 总数= 下单人.shape[0] print(总数) for 下单人 in 下单人.unique(): 关联条件 = df[(df.商品 == 商品) & (df.下单人==下单人)].fillna('空值') 单数,金额 = 关联条件.shape[0],关联条件.金额.sum() dic.append('~'.join(map(str,(eval(_) for _ in label))).split("~")) print(dic) #可以按照商品排序 data = pd.DataFrame(dic, columns=label).sort_values(by='商品') data.to_excel(dir+'output1.xlsx', sheet_name='Sheet1',index=False) #可以按照金额排序 data = pd.DataFrame(dic, columns=label).sort_values(by='金额') data.to_excel(dir+'output1.xlsx', sheet_name='Sheet1',index=False)
三:注意事项
1:删除含有空值的行
df.dropna(inplace=True)
2:空值填充
df.fillna(0, inplace = True)
3: 某个列空值填充
df.金额.fillna(0, inplace = True)