Python Pandas – 从 DateTimeIndex 中提取频率
在使用 Pandas 进行时间序列数据分析时,我们常常需要从 DateTimeIndex(时间索引)中提取时间频率。本文将介绍如何通过 Pandas 的 freq 属性来获取 DateTimeIndex 中的时间频率,并给出实例代码。
更多Pandas相关文章,请阅读:Pandas 教程
1. DateTimeIndex 简介
在 Pandas 中,DateTimeIndex 用于存放时间序列数据的索引。DateTimeIndex 的创建通常使用 Pandas 的 to_datetime() 函数,它能够将字符串形式的时间数据转换为 Datetime 对象。具体用法如下:
import pandas as pd
# 创建一个包含时间数据的 Series
dates = pd.Series(['2021-05-01 12:00:00', '2021-05-02 12:00:00', '2021-05-03 12:00:00'])
# 将 Series 转换为 DateTimeIndex
datetimeIndex = pd.to_datetime(dates)
print(datetimeIndex)
运行以上代码,输出结果如下:
0 2021-05-01 12:00:00
1 2021-05-02 12:00:00
2 2021-05-03 12:00:00
dtype: datetime64[ns]
可以看出,使用 Pandas 的 to_datetime() 函数将包含时间数据的 Series 转换为了 DateTimeIndex。需要注意的是,在转换时要保证时间数据格式正确,否则会出现转换不成功的情况。
2. 提取时间频率
在 Pandas 中,我们可以通过 freq 属性来获取 DateTimeIndex 的时间频率。具体用法如下:
import pandas as pd
# 创建一个包含时间数据的 Series
dates = pd.Series(['2021-05-01 12:00:00', '2021-05-02 12:00:00', '2021-05-03 12:00:00'])
# 将 Series 转换为 DateTimeIndex
datetimeIndex = pd.to_datetime(dates)
# 获取 DateTimeIndex 的时间频率
frequency = datetimeIndex.freq
print(frequency)
运行以上代码,输出结果如下:
None
此处输出 None 的原因是,DateTimeIndex 中并没有指定时间频率。如果我们指定了时间频率,那么就可以正确地获取到时间频率了。具体用法如下:
import pandas as pd
# 创建一个包含时间数据的 Series
dates = pd.Series(['2021-05-01 12:00:00', '2021-05-02 12:00:00', '2021-05-03 12:00:00'])
# 将 Series 转换为 DateTimeIndex,并设置时间频率为每天
datetimeIndex = pd.to_datetime(dates, freq='D')
# 获取 DateTimeIndex 的时间频率
frequency = datetimeIndex.freq
print(frequency)
运行以上代码,输出结果如下:
<Day>
由于我们在创建 DateTimeIndex 时指定了时间频率为每天(’D’),因此获取到的时间频率就是 Day。
在 Pandas 中,支持的时间频率非常多,下面是一些常用的时间频率和对应的代码值:
频率 | 代码值 |
---|---|
每天 | ‘D’ |
每周 | ‘W’ |
每月 | ‘M’ |
每季度 | ‘Q’ |
每年 | ‘Y’ |
3. 示例代码
在这里,我们给出一个简单的示例代码,演示如何使用 Pandas 获取 DateTimeIndex 的时间频率。
import pandas as pd
# 创建一个包含时间数据的 Series
dates = pd.Series(['2021-05-01 12:00:00', '2021-05-02 12:00:00', '2021-05-03 12:00:00'])
# 将 Series 转换为 DateTimeIndex,并设置时间频率为每天
datetimeIndex = pd.to_datetime(dates, freq='D')
# 获取 DateTimeIndex 的时间频率
frequency = datetimeIndex.freq
print(frequency)
# 将 Series 转换为 DataFrame
data = pd.DataFrame({'date': datetimeIndex, 'value': [1, 2, 3]})
# 按照时间频率进行重采样
resampled_data = data.resample('W', on='date').sum()
print(resampled_data)
以上代码中,我们将包含时间数据的 Series 转换为 DateTimeIndex,并设置时间频率为每天(’D’)。然后将其转换为 DataFrame,并按照每周的时间频率进行重采样,生成新的 DataFrame。运行以上代码,输出结果如下:
<Day>
value
date
2021-05-02 3
2021-05-09 1
可以看到,按照每周的时间频率重采样后,数据的值被加和到了每周的第一天(例如 2021-05-02 对应的值是 3,是原始数据中 2021-05-01 和 2021-05-02 的值相加得到的)。这样就方便了我们对时间序列数据的聚合和统计分析。
结论
在 Pandas 中,我们可以通过 freq 属性来获取 DateTimeIndex 的时间频率。需要注意的是,在创建 DateTimeIndex 时要正确地设置时间频率,否则会导致时间频率无法正确获取。通过获取时间频率,我们可以方便地对时间序列数据进行聚合和重采样。