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

pandas,技巧,日期,相关,处理 · 浏览次数 : 169

小编点评

**日期处理技巧** **1. 多列合并为日期** ```python import pandas as pddf df[\"date\"] = pd.to_datetime(df[[\"year\", "month", "day\"]]) ``` **2. 按年统计** ```python df.resample("Y", on="date").value.sum() # ysum df.resample("Y", on="date").value.mean() # ymean ``` **3. 按月统计** ```python df.resample("M", on="date").value.sum() # msum df.resample("M", on="date").value.mean() # mmean ``` **4. 按日统计** ```python df.resample("D", on="date").value.sum() # dsum df.resample("D", on="date").value.mean() # dmean ``` **5. 按季度统计** ```python df.resample("Q", on="date").value.sum() # qsum df.resample("Q", on="date").value.mean() # qmean ``` **6. 按周统计** ```python df.resample("W", on="date").value.sum() # wsum df.resample("W", on="date").value.mean() # wmean ``` **7. 支持的其他期间** ```python # 支持的期间:年 (Y)、月 (M)、日 (D)、周 (W)、季度 (Q) df.resample(on="date", on="month", on="day", on="week", on="quarter") ``` **注意:** * `on` 参数表示时间轴的字段名。 * `on` 参数可以是多个字段名。 * `resample()` 函数可以用于按其他时间单元进行聚合。

正文

日期处理相关内容之前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

与【pandas小技巧】--日期相关处理相似的内容:

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

日期处理相关内容之前`pandas基础`系列中有一篇专门介绍过,本篇补充两个常用的技巧。 # 1. 多列合并为日期 当收集来的数据中,年月日等信息分散在多个列时,往往需要先合并成日期类型,然后才能做分析处理。合并多列转换为日期类型,可以直接用 `to_datetime`函数来处理: ```pytho

【pandas小技巧】--拆分列

拆分列是`pandas`中常用的一种数据操作,它可以将一个包含多个值的列按照指定的规则拆分成多个新列,方便进行后续的分析和处理。拆分列的使用场景比较广泛,以下是一些常见的应用场景: 1. 处理日期数据:在日期数据中,经常会将年、月、日等信息合并成一列,通过拆分列可以将其拆分成多个新列,方便进行时间序

【pandas小技巧】--数据转置

所谓**数据转置**,就是是将原始数据表格沿着对角线翻折,使原来的行变成新的列,原来的列变成新的行,从而更方便地进行数据分析和处理。 `pandas`中`DataFrame`的转置非常简单,每个`DataFrame`对象都有一个`T`属性,通过这个属性就能得到转置之后的`DataFrame`。下面介

【pandas小技巧】--统计值作为新列

这次介绍的小技巧不是统计,而是把统计结果作为**新列**和原来的数据放在一起。`pandas`的各种统计功能之前已经介绍了不少,但是每次都是统计结果归统计结果,原始数据归原始数据,没有把它们合并在一个数据集中来观察。 下面通过两个场景示例来演示如果把统计值作为新列的数据。 # 1. 成绩统计的场景

【pandas小技巧】--category类型补充

`category`类型在**pandas基础**系列中有一篇介绍数据类型的文章中已经介绍过。`category`类型并不是`python`中的类型,是`pandas`特有的类型。 `category`类型的优势那篇文章已经介绍过,当时只是介绍了如何将某个列的数据转换成`category`类型,以及

【pandas小技巧】--DataFrame的显示参数

我们在`jupyter notebook`中使用`pandas`显示`DataFrame`的数据时,由于屏幕大小,或者数据量大小的原因,常常会觉得显示出来的表格不是特别符合预期。 这时,就需要调整`pandas`显示`DataFrame`的方式。`pandas`为我们提供了很多调整显示方式的参数,具

【pandas小技巧】--DataFrame的显示样式

上一篇介绍了`DataFrame`的显示参数,主要是对`DataFrame`中值进行调整。 本篇介绍`DataFrame`的显示样式的调整,显示样式主要是对表格本身的调整,比如颜色,通过颜色可以突出显示重要的值,观察数据时可以更加高效的获取主要信息。 下面介绍一些针对单个数据和批量数据的样式调整方式

【pandas小技巧】--花哨的DataFrame

最近github上发现了一个库(`plottable`),可以用简单的方式就设置出花哨的 `DataFrame` 样式。 github上的地址:[https://github.com/znstrider/plottable](https://github.com/znstrider/plottabl

【pandas小技巧】--目录(完结)

`pandas`小技巧系列是介绍的是使用`pandas`分析数据时,最常用的一些操作技巧。 具体包括: 1. [创建测试数据](https://www.cnblogs.com/wang_yb/p/17552748.html) 学习pandas的过程中,为了尝试pandas提供的各类功能强大的函数,常

【pandas小技巧】--创建测试数据

学习`pandas`的过程中,为了尝试`pandas`提供的各类功能强大的函数,常常需要花费很多时间去创造测试数据。 在`pandas`中,快速创建测试数据可以更快的评估 `pandas` 函数。通过生成一组测试数据,可以评估例如 `read_csv`、`read_excel`、`groupby`等