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 的强大功能,我们可以轻松地完成这些操作,并更深入地了解数据中蕴含的含义。