当前位置: 首页 > 科技观察

Python处理大数据的两个神奇操作

时间:2023-03-12 11:14:24 科技观察

Python有一个处理大数据的库。结合xlrd库,在做一些大数据处理的统计工作时非常有用,比如性能测试。你的结果数据是什么?统计了一下,python有一个库pandas,非常擅长做这个工作,这里有两个pandas操作。pandas中groupby、Grouper和agg函数的使用。这两个函数的作用类似,都是在数据集中的一类属性上进行聚合,比如统计某个用户每个月的所有支出,统计最大值、最小值、累计值和平均值某种属性。统计“extprice”属性在每个月的累计(总和)值importpandasaspdimportcollectionsdf=pd.read_excel("D:/Download/chrome/sample-salesv3.xlsx")#print(df.head(10))df["date"]=pd.to_datetime(df["date"])#print(df.head(10))df1=df.set_index("date").resample("M")['extprice']。sum()#print(df1.head())统计每个用户每个月属性"extprice"的总和值,使用Grouperdf2=df.groupby(["name",pd.Grouper(key="date"),freq="M")])["extprice"]print(df2.head(10))Aggagg函数,提供基于列的聚合操作。而groupby可以看成是一种基于行,或者说索引的聚合操作。从实现上看,groupby返回的是一个DataFrameGroupBy结构,必须调用聚合函数(如sum)才能得到Series结构的数据结果。而agg是DataFrame的一个直接方法,返回的也是一个DataFrame。当然很多功能也可以用sum、mean等实现。但是agg更简洁,传递给它的函数可以是字符串也可以自定义。参数为该列对应的子DataFrame,获取“extprice”、“quantity”、“unitprice”三列各自的累计值。Meandf3=df[["extprice","quantity","unitprice"]].agg(["sum","mean"])print(df3.head())可以对不同的列使用不同的聚合函数df4=df.agg({"extprice":["sum","mean"],"quantity":["sum","mean"],"unitprice":["mean"]})print(df4.head())还可以自定义函数,比如统计sku中购买最多的商品的商品数量,通过lambda表达式来实现。#统计sku中购买次数最多的商品编号get_max=lambdax:x.value_counts(dropna=False).index[0]get_max.__name__="mostfrequent"df5=df.agg({"extprice":["sum","mean"],"quantity":["sum","mean"],"unitprice":["mean"],"sku":[get_max]})print(df5)OrderedDictagg_dict={"extprice":["sum","mean"],"quantity":["sum","mean"],"unitprice":["mean"],"sku":[get_max]}#按长度排序列名称。OrderedDict的顺序与df6=df.agg(collections.OrderedDict(sorted(agg_dict.items(),key=lambdax:len(x[0]))))print(df6)源数据链接的插入顺序一致:https://github.com/chris1610/pbpython/tree/master/data