【pandas基础】--日期处理

pandas,基础,日期,处理 · 浏览次数 : 160

小编点评

**日期类型在时间序列分析中的重要性** 时间序列数据是一种按时间顺序记录的序列数据。它们通常用于预测未来值或评估过去值的统计方法,例如预测未来趋势、季节性变化、周期性变化、随机波动等。 **日期类型特有的属性** * **`dt.year`、`dt.month`、`dt.day`:**用于获取日期的年份、月份和天数。 * **`dt.isocalendar()``:**用于获取日期所在的季度。 * **`dt.quarter``:**用于获取日期所在的季度。 **日期类型转换** 1. **`pd.to_datetime`函数**:用于将字符串日期转换为日期类型。 2. **`pd.date_range`函数**:用于生成日期序列。 3. **`df["日期"].dt.strftime("%Y-%m-%d")`:**用于格式化日期字符串。 **日期属性的使用** 1. **`df["日期"].dt.year`、`df["日期"].dt.month`、`df["日期"].dt.day`:**用于获取日期的年份、月份和天数。 2. **`df["日期"].dt.isocalendar().week`:**用于获取日期所在的季度。 3. **`df["日期"].dt.quarter`:**用于获取日期所在的季度。 **日期类型在时间序列分析中的重要性** 日期类型是时间序列数据的重要属性,因为它可以帮助我们: * 确定日期所在的年份、月份和天数。 * 获取日期所在的季度。 * 确定日期所在的周期的开始和结束日期。 通过了解日期类型,我们可以更有效地处理和分析时间序列数据。

正文

时间序列数据是数据分析中一类常见且重要的数据。
它们按照时间顺序记录,通常是从某些现象的观察中收集的,比如经济指标、气象数据、股票价格、销售数据等等。

时间序列数据的特点是有规律地随着时间变化而变化,它们的变化趋势可以被分析和预测。时间序列分析是一种用于预测未来值或评估过去值的统计方法,常常被用于预测未来趋势、季节性变化、周期性变化、随机波动等。

1. 日期类型

原始数据中,日期一般会存储为各种类型字符串,比如:

  • 2022/5/1
  • 2022-05-02
  • 3/5/2022

将其统一转换为pandas的日期类型,后续统计分析时,不仅方便计算,还可以有效避免应对各种格式带来的麻烦。

1.1 转换为日期类型

pandasto_datetime函数对于数据集中各类日期字符串都能有效的转换。

df = pd.DataFrame(
    {
        "日期": ["2022/5/1", "2022-05-02", "3/5/2022"],
        "城市": ["合肥", "合肥", "合肥"],
        "平均气温": [28, 31, 27],
    },
)

print(df)
print(df.dtypes)

image.pngimage.png

可以看出,默认的日期是字符串类型且格式混乱。
转换后:

df["日期"] = pd.to_datetime(df["日期"])
print(df)
print(df.dtypes)

image.pngimage.png
日期显示起来格式统一了,类型也变为了datetime64[ns]

1.2 生成日期序列

除了将数据集读取来的日期字符串转换为日期类型,我们也可以生成日期序列,这些生成的日期序列可以作为的数据索引,也可以用来补充数据集中缺失的日期值。

df = pd.DataFrame()
df["年"] = pd.date_range('2020-01-01', periods=3, freq='Y')
df["月"] = pd.date_range('2020-01-01', periods=3, freq='M')
df["日"] = pd.date_range('2020-01-01', periods=3, freq='D')
df["周"] = pd.date_range('2020-01-01', periods=3, freq='W')
df["季度"] = pd.date_range('2020-01-01', periods=3, freq='Q')
df

image.png
上面的示例分别以季度为间隔,生成3条连续的时间序列。

1.3 修改日期

修改日期的值,也是利用日期类型自带的方法,不用像修改字符串那样修改,那样极易出错。

df = pd.DataFrame()
d = pd.date_range('2020-01-01', periods=3, freq='D')
df["原始日期"] = d
df["延迟三天"] = d.shift(3, freq="D")
df["提前三天"] = d.shift(-3, freq="D")
df

image.png
这里是按调整的,如果要按照季度等调整,像上一个例子那样设置freq参数即可。

2. 日期属性

将数据转换为pandas日期类型的最大好处就是可以使用日期类型特有的属性,方便进行各个维度的分析。

常用的日期维度是年,月,日,周,季度。

2.1 年

利用日期属性按年份统计合计值:

df = pd.DataFrame(
    {
        "日期": ["2020/5/1", "2021/5/1", "2021/6/3", "2022/9/4"],
        "平均气温": [28, 31, 27, 33],
    },
)

df["日期"] = pd.to_datetime(df["日期"])
df["年"] = df["日期"].dt.year
print(df)
print(df.groupby(df["年"]).sum())

image.png
两个2021年的数据统计了合计值。

2.2 月

按月统计合计值:

df = pd.DataFrame(
    {
        "日期": ["2020/5/1", "2021/5/1", "2021/6/3", "2022/9/4"],
        "平均气温": [28, 31, 27, 33],
    },
)

df["日期"] = pd.to_datetime(df["日期"])
df["月"] = df["日期"].dt.month
print(df)
print(df.groupby(df["月"]).sum())

image.png
两个5月份的数据统计了合计值。

2.3 日

按日统计合计值:

df = pd.DataFrame(
    {
        "日期": ["2020/5/1", "2021/5/1", "2021/6/3", "2022/9/4"],
        "平均气温": [28, 31, 27, 33],
    },
)

df["日期"] = pd.to_datetime(df["日期"])
df["日"] = df["日期"].dt.day
print(df)
print(df.groupby(df["日"]).sum())

image.png
两个1号的数据统计了合计值。

2.4 周

按周统计合计值:

df = pd.DataFrame(
    {
        "日期": ["2021/5/1", "2021/5/31", "2021/6/3", "2021/9/4"],
        "平均气温": [28, 31, 27, 33],
    },
)

df["日期"] = pd.to_datetime(df["日期"])
df["周"] = df["日期"].dt.isocalendar().week
print(df)
print(df.groupby(df["周"]).sum())

image.png
上面两个日期同属于第22周,所以计算了合计值。
获取周属性与前面略有不同,不是直接获取week,而是用isocalendar().week

2.5 季度

按季度统计合计值:

df = pd.DataFrame(
    {
        "日期": ["2021/5/1", "2021/5/31", "2021/6/3", "2021/9/4"],
        "平均气温": [28, 31, 27, 33],
    },
)

df["日期"] = pd.to_datetime(df["日期"])
df["季度"] = df["日期"].dt.quarter
print(df)
print(df.groupby(df["季度"]).sum())

image.png
上面3个日期都是第二季度,所以计算了合计值。

3. 总结回顾

本篇特意将pandas中的日期类型单独介绍,
一方面是因为日期类型与其他类型相比,多出了很多特有的属性;
另一方面,时间序列数据和回归分析中也会大量用到日期类型。

这里介绍了日期类型的转换方法和常用属性,但日期类型不仅仅限于这些属性,其他的属性可以参考pandas的官方文档:Index objects — pandas 2.0.1 documentation

与【pandas基础】--日期处理相似的内容:

【pandas基础】--日期处理

时间序列数据是数据分析中一类常见且重要的数据。 它们按照时间顺序记录,通常是从某些现象的观察中收集的,比如经济指标、气象数据、股票价格、销售数据等等。 时间序列数据的特点是有规律地随着时间变化而变化,它们的变化趋势可以被分析和预测。时间序列分析是一种用于预测未来值或评估过去值的统计方法,常常被用于预

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

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

【pandas基础】--概述

Pandas是一个开源的Python数据分析库。 它提供了快速,灵活和富有表现力的数据结构,旨在使数据清洗和分析变得简单而快速。 Pandas是基于NumPy数组构建的,因此它在许多NumPy函数上提供了直接的支持。它还提供了用于对表格数据进行操作的数据结构,例如Series和DataFrame。

【pandas基础】--数据读取

数据读取是第一步,只有成功加载数据之后,后续的操作才有可能。 pandas可以读取和导入各种数据格式的数据,如CSV,Excel,JSON,SQL,HTML等,不需要手动编写复杂的读取代码。 1. 各类数据源 pandas提供了导入各类常用文件格式数据的接口,这里介绍3种最常用的加载数据的接口。 1

【pandas基础】--核心数据结构

pandas中用来承载数据的两个最重要的结构分别是: Series:相当于增强版的一维数组 DataFrame:相当于增强版的二维数组 pandas最大的优势在于处理表格类数据,如果数据维度超过二维,一般我们会使用另一个 python的库 numpy。 本篇主要介绍这两种核心数据结构的创建方式。 1

【pandas基础】--数据检索

pandas的数据检索功能是其最基础也是最重要的功能之一。 pandas中最常用的几种数据过滤方式如下: 行列过滤:选取指定的行或者列 条件过滤:对列的数据设置过滤条件 函数过滤:通过函数设置更加复杂的过滤条件 本篇所有示例所使用的测试数据如下: import pandas as pd import

【pandas基础】--数据整理

pandas进行数据整理的意义在于,它是数据分析、数据科学和机器学习的前置步骤。 通过数据整理可以提前了解数据的概要,缺失值、重复值等情况,为后续的分析和建模提供更为可靠的数据基础。 本篇主要介绍利用pandas进行数据整理的各种方法。 1. 数据概要 获取数据概要信息可以帮助我们了解数据的基本情况

【pandas基础】--数据修改

pandas 作为一种常用的数据分析工具,提供了广泛的数据修改方法。 既可以针对行或者列的数据进行修改,也可以对具体单个元素进行修改,还可以基于条件选择要修改的行或者列的数据。 1. 增加数据 1.1 增加行数据 pandas的DataFrame增加一行或者多行数据之前是使用append方法。 im

【pandas基础】--数据拆分与合并

数据集拆分是将一个大型的数据集拆分为多个较小的数据集,可以让数据更加清晰易懂,也方便对单个数据集进行分析和处理。 同时,分开的数据集也可以分别应用不同的数据分析方法进行处理,更加高效和专业。 数据集合并则是将多个数据集合并成一个大的数据集,可以提供更全面的信息,也可以进行更综合的数据分析。 同时,数

【pandas基础】--数据排序

`pandas`的数据排序可以帮助我们更好地理解和分析数据。 通过对数据进行排序,我们可以提取出特定的信息,例如最大值、最小值、中位数、众数等等,从而更准确地识别数据的特征和特点。 此外,数据排序还可以帮助我们更好地进行数据可视化,例如绘制直方图、箱线图等等,进一步帮助我们对数据进行解读和分析。 总