• 【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

  • 相关阅读:
    嵌入式分享合集90
    Tomcat 服务详解
    python之内存池技术
    Java EE初阶---网络编程套接字
    聊聊logback的MarkerFilter
    设计接口应该考虑的因素以及遵循的原则
    wpf-窗口设计-常用小技巧
    [k8s] 常见yml配置和详细解释
    Guacamole 配置开启 Radius 身份认证方式
    即时通讯Web端通信方式的演进
  • 原文地址:https://www.cnblogs.com/wang_yb/p/17628030.html