Python Pandas – 从带有特定时间序列频率的 DateTimeIndex 中提取星期几

Python Pandas – 从带有特定时间序列频率的 DateTimeIndex 中提取星期几

介绍

在 Pandas 中,使用 DateTimeIndex 对象进行时间序列操作是非常常见的。当我们的 DateTimeIndex 对象有特定的时间序列频率时,例如按每天、每周或每月进行时间索引,我们可能更希望提取日期的部分,例如星期几。在本文中,我们将介绍如何使用 Pandas 获取 DateTimeIndex 中的星期数。

简单示例

首先,我们需要创建一个具有时间序列频率的 DateTimeIndex 对象。假设我们要创建从 2021 年 1 月 1 日到 2021 年 12 月 31 日之间所有日期的索引。我们可以使用 Pandas 中的 date_range 函数来创建该索引:

import pandas as pd

idx = pd.date_range('2021-01-01', '2021-12-31', freq='D')
print(idx)

输出将是一个具有 365 个日期的 DateTimeIndex 对象,其频率为 ‘D’,表示按照天数进行时间索引:

DatetimeIndex(['2021-01-01', '2021-01-02', '2021-01-03', '2021-01-04',
               '2021-01-05', '2021-01-06', '2021-01-07', '2021-01-08',
               '2021-01-09', '2021-01-10',
               ...
               '2021-12-22', '2021-12-23', '2021-12-24', '2021-12-25',
               '2021-12-26', '2021-12-27', '2021-12-28', '2021-12-29',
               '2021-12-30', '2021-12-31'],
              dtype='datetime64[ns]', length=365, freq='D')

要提取每个日期的星期数,我们可以使用 Pandas 中的 weekday 函数。此函数将返回一个整数,表示该日期的星期几,其中星期一为 0,星期日为 6。因此,要提取 DateTimeIndex 中所有日期的星期数,我们可以使用以下代码:

weekday = idx.weekday
print(weekday)

输出将是一个包含每个日期的星期数的一维数组:

Int64Index([4, 5, 6, 0, 1, 2, 3, 4, 5, 6,
            ...
            2, 3, 4, 5, 6, 0, 1, 2, 3, 4],
           dtype='int64', length=365)

完整示例

让我们来看一个更完整的示例。假设我们有一个名为 data.csv 的文件,其中记录了某个电商平台最近一年的订单信息,包括订单编号、订单日期、订单金额等字段。这个文件的前几行可能长这样:

order_id,order_date,total_amount
1,2020-01-01,99.99
2,2020-01-01,19.99
3,2020-01-01,49.99
4,2020-01-02,29.99
5,2020-01-02,199.99
6,2020-01-02,79.99

我们首先需要使用 Pandas 中的 read_csv 函数将其加载到 DataFrame 中:

df = pd.read_csv('data.csv', parse_dates=['order_date'])
print(df)

注意,我们使用 parse_dates 参数将 order_date 列解析为 Pandas 中的 DateTimeIndex 对象。

输出将是一个具有订单编号、订单日期、订单金额等字段的 DataFrame,其中 order_date 列已经被解析为 DateTimeIndex:

   order_id order_date  total_amount
0         1 2020-01-01         99.99
1         2 2020-01-01         19.99
2         3 2020-01-01         49.99
3         4 2020-01-02         29.99
4         5 2020-01-02        199.99
5         6 2020-01-02         79.99
...

现在,我们可以使用 Pandas 中的 weekday 函数,提取每个订单的星期数。我们可以使用以下代码:

weekday = df['order_date'].dt.weekday
df['weekday'] = weekday
print(df.head())

这将向 DataFrame 添加一个新的 weekday 列,其值是每个订单的星期数。输出将是一个具有订单编号、订单日期、订单金额和星期数等字段的 DataFrame:

   order_id order_date  total_amount  weekday
0         1 2020-01-01         99.99        2
1         2 2020-01-01         19.99        2
2         3 2020-01-01         49.99        2
3         4 2020-01-02         29.99        3
4         5 2020-01-02        199.99        3
...

现在,我们可以使用 Pandas 中的 groupby 函数,按照星期数对订单进行分组,并计算每个星期的订单总金额:

total_by_weekday = df.groupby('weekday')['total_amount'].sum()
print(total_by_weekday)

输出将是一个包含每个星期的总订单金额的一维数组:

weekday
0    34890.05
1    34286.97
2    28449.34
3    35136.26
4    32521.16
5    26602.16
6    25808.12
Name: total_amount, dtype: float64

结论

在 Pandas 中,使用 weekday 函数可以轻松地从带有特定时间序列频率的 DateTimeIndex 中提取星期几信息。可以将其用于各种时间序列应用程序,例如计算每个星期的销售量、在线用户等。通过使用 Pandas 的强大功能,我们可以轻松地完成这些操作,并更深入地了解数据中蕴含的含义。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程