在本文中,将演示一些不常见但非常有用的Pandas函数。创建示例DataFrame。importnumpyasnpiimportpandasaspddf=pd.DataFrame({"date":pd.date_range(start="2021-11-20",periods=100,freq="D"),"class":["A","B","C","D"]*25,"amount":np.random.randint(10,100,size=100)})df.head()我们创建一个3列100行的DataFrame.date列包含100个连续的日期,class列包含4个不同的值存储在一个object数据类型中,amount列包含10到100之间的随机整数。1.to_period在Pandas中,to_period函数允许一个日期是转换为特定的时间间隔。使用此方法可以获取具有许多不同间隔或周期的日期,例如天、周、月、季度等。比如对于时间类型的列,month方法只返回月份的值,很多时候是无用的,我们无法区分2020年12月和2021年12月。但是我们通过使用参数“M”实现时间序列to_period函数。让我们为年月和季度创建新列。df["月"]=df["日期"].dt.to_period("M")df["季度"]=df["日期"].dt.to_period("Q")df.head()也可以在DataFrame中查看不同的年月季值。df["month"].value_counts()#output2021-12312022-01312022-02272021-1111Freq:M,Name:month,dtype:int64--------------------------df["quarter"].value_counts()#output2022Q1582021Q442Freq:Q-DEC,Name:quarter,dtype:int642,Cumsum和groupbycumsum是一个非常有用的Pandas函数。它计算列中值的累计和。下面是我们通常的使用方法:df["cumulative_sum"]=df["amount"].cumsum()df.head()这样就得到了amount列值的累加和。但它只是所有的总和,没有考虑分类。在某些情况下,我们可能需要分别计算不同类别的累积和。在Pandas中,我们只需要按类列对行进行分组并应用cumsum函数。df["class_cum_sum"]=df.groupby("class")["amount"].cumsum()让我们看看A类的结果。df[df["class"]=="A"的累积和列.head()类包含为每个类单独计算的累积值的总和。3.类别数据类型我们经常需要处理具有有限且固定数量的值的分类数据。例如,在我们的DataFrame中,“分类”列有4个具有不同值的分类变量:A、B、C、D。默认情况下,该列的数据类型是对象。df.dtypes#outputdatedatetime64[ns]classobjectamountint64monthperiod[M]quarterperiod[Q-DEC]cumulative_sumint64class_cum_sumint64Pandas还有一个“类别”数据类型,它比对象数据类型消耗更少的内存。因此,最好尽可能使用类别数据类型。df["class_category"]=df["class"].astype("category")df.dtypes#outputdatedatetime64[ns]classobjectamountint64monthperiod[M]quarterperiod[Q-DEC]cumulative_sumint64class_cum_sumint64class_categorycategorydtype:现在对象您可以比较class和class_category列的内存消耗。df.memory_usage()#outputIndex128date800class800amount800month800quarter800cumulative_sum800class_cum_sum800class_category304dtype:int64class_category列消耗的内存不到class列的一半。差异是496字节,但不多。但是当我们处理大型数据集时,这种差异会被放大,从而节省大量空间。https://avoid.overfit.cn/post/a153164fae64466b800e1d3d596abbbd作者:SonerY?ld?r?m
