• 【pandas小技巧】--日期相关处理


    日期处理相关内容之前pandas基础系列中有一篇专门介绍过,本篇补充两个常用的技巧。

    1. 多列合并为日期

    当收集来的数据中,年月日等信息分散在多个列时,往往需要先合并成日期类型,然后才能做分析处理。
    合并多列转换为日期类型,可以直接用 to_datetime函数来处理:

    import pandas as pd
    
    df = pd.DataFrame(
        {
            "year": ["2021", "2021",
                     "2022", "2022", "2022"],
            "month": ["1", "3", "4", "4", "6"],
            "day": ["10", "20", "4", "4", "1"],
            "value": [1, 2, 3, 4, 5],
        }
    )
    
    df["date"] = pd.to_datetime(
        df[["year", "month", "day"]]
    ) 
    df = df.drop(
        columns=["year", "month", "day"]
    )
    df
    

    image.png

    2. 基于日期的聚合统计

    之所以要把列类型转换为日期类型,是因为pandas提供了针对日期类型的非常便利的聚合统计方法。
    比如如下连续的日期数据:

    df = pd.DataFrame(
        {
            "year": ["2022", "2022", "2023",
                     "2023", "2023"],
            "month": ["12", "12", "1", "1", "1"],
            "day": ["30", "31", "1", "1", "2"],
            "value": [1, 2, 3, 4, 5],
        }
    )
    df["date"] = pd.to_datetime(
        df[["year", "month", "day"]]
    ) 
    df = df.drop(
        columns=["year", "month", "day"]
    )
    df = df.loc[:, ::-1]
    df
    

    image.png
    这里用了之前介绍过的一个小技巧 df.loc[:, ::-1],把date列放在value列之前,对数据处理没有什么影响,只是为了看数据的习惯。

    得到转换好的数据之后,可以通过resample函数来聚合统计。
    resamplepandas提供的专门用于时间序列数据的聚合统计的。

    2.1. 按年统计

    ysum = df.resample("Y", on="date").value.sum()
    ymean = df.resample("Y", on="date").value.mean()
    
    stat = pd.DataFrame({
        "sum": ysum,
        "mean": ymean,
    })
    stat
    

    image.png
    示例数据只有两年的,统计后显示的是日期是年末最后一天。
    这里为了演示只统计了合计值平均值,实际可以根据情况统计需要的值。

    2.2. 按月统计

    msum =	df.resample("M", on="date").value.sum()
    mmean = df.resample("M", on="date").value.mean()
    stat = pd.DataFrame({
        "sum": msum,
        "mean": mmean,
    })
    stat
    

    image.png
    统计后显示的日期是每个月月末的日期。

    2.3. 按日统计

    dsum = df.resample("D", on="date").value.sum()
    dmean = df.resample("D", on="date").value.mean()
    stat = pd.DataFrame({
        "sum": dsum,
        "mean": dmean,
    })
    stat
    

    image.png
    根据每天的日期统计。

    2.4. 按季度统计

    qsum = df.resample("Q", on="date").value.sum()
    qmean = df.resample("Q", on="date").value.mean()
    stat = pd.DataFrame({
        "sum": qsum,
        "mean": qmean,
    })
    stat
    

    image.png
    统计后显示的日期是每个季度的最后一天。

    2.5. 按周统计

    wsum = df.resample("W", on="date").value.sum()
    wmean = df.resample("W", on="date").value.mean()
    
    stat = pd.DataFrame({
        "sum": wsum,
        "mean": wmean,
    })
    stat
    

    image.png
    统计后显示的日期是每个周的周日

    2.6. 补充

    resample函数支持的统计期间除了上面介绍的常用的季度等等,还有很多其他的期间,
    具体参考:https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html#timeseries-offset-aliases

    image.png

  • 相关阅读:
    选择排序算法(思路分析) [数据结构][Java]
    【计算机网络】数据链路层-MAC和ARP协议
    微服务技术栈-Nacos配置管理和Feign远程调用
    用DIV+CSS技术制作一个简单的网页 我的家乡主题
    【网络原理】- 传输层 TCP 十大机制 / UDP 协议 && 自定义应用层协议
    引擎入门 | Unity UI简介–第2部分(4)
    申请发明专利的流程及时间
    安卓APP源码和设计报告——购物APP的设计与实现
    csp202206
    安利几个堪称黑科技的电脑软件
  • 原文地址:https://www.cnblogs.com/wang_yb/p/17628030.html