pd.date_range()
是处理时间序列数据时非常重要的函数。它用于生成具有特定频率的固定长度的 DatetimeIndex
,适用于创建时间序列数据或作为 DataFrame
或 Series
的时间索引。使用pd.to_datetime()
将字符串转换为日期时间对象。
1)pd.date_range()
参数说明:
参数 |
描述 |
start |
时间范围的开始日期/时间。可以是字符串或日期时间对象。 |
end |
时间范围的结束日期/时间。可以是字符串或日期时间对象。 |
periods |
要生成的时间点数量。如果指定了 start 和 end,这个参数可选。 |
freq |
时间点的频率,如 'D'(每天),'M'(月末),'H'(每小时)等。 |
tz |
时区名称,用于本地化时间索引。 |
normalize |
如果为 True,则时间部分将归一化到午夜。 |
name |
生成的 DatetimeIndex 的名称。 |
closed |
控制间隔的哪一端是闭合的,可选项包括 'left'、'right'。 |
使用示例:Python Pandas 时间序列分析 日期时间的处理和转换-CJavaPy
2)pd.to_datetime()
pd.to_datetime()
是处理和转换日期时间数据的重要工具。它可以将多种格式的数据转换为 Pandas 的 datetime
类型。
参考说明:
参数 |
描述 |
arg |
要转换的日期时间数据。 可以是单个字符串、数字、列表、Series 或 DataFrame。 |
errors |
如何处理错误。'ignore' 忽略错误, 'raise' 抛出错误,'coerce' 将错误设置为 NaT。 |
format |
指定解析日期时间的格式(如 '%Y-%m-%d')。 |
unit |
指定时间戳单位(如 's' 表示秒)。 |
使用示例:Python Pandas 时间序列分析 日期时间的处理和转换-CJavaPy
可以从日期时间对象中提取年份、月份、日等信息。
import pandas as pd import numpy as np dates = pd.date_range('20230101', periods=6) # 提取日期时间的组成部分 year = dates.year month = dates.month day = dates.day # 提取小时 # dates.hour # 提取分钟 # dates.minute # 提取秒 # dates.second # 提取微秒 # dates.microsecond print("年:", year) print("月:", month) print("日:", day)
进行时间序列分析时,日期和时间的算术运算是一个重要的特性。
import pandas as pd # 日期加减 date_plus_10_days = pd.Timestamp('2024-01-01') + pd.Timedelta(days=10) print("Date plus 10 days:", date_plus_10_days) # 时间差 time_difference = pd.Timestamp('2024-01-11') - pd.Timestamp('2024-01-01') print("Time difference:", time_difference) # 时间偏移 next_month_end = pd.Timestamp('2024-01-01') + pd.offsets.MonthEnd() print("Next month end:", next_month_end) # 创建时间序列数据 series = pd.Series([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], index=pd.date_range('2024-01-01', periods=10)) # 数据向后移动 shifted_series = series.shift(periods=1) print("\nShifted Series:\n", shifted_series) # 计算滑动窗口平均值 rolling_avg = series.rolling(window=5).mean() print("\nRolling Window Average:\n", rolling_avg)
将时间数据本地化到特定的时区,以及在不同时区之间进行转换。这在处理跨越多个地理位置的数据时特别有用。
import pandas as pd # 创建时间序列 ts = pd.Series(pd.date_range('2021-01-01', periods=3, freq='H')) # 本地化到 UTC 时区 ts_localized = ts.dt.tz_localize('UTC') print("Localized to UTC:\n", ts_localized) # 转换到中国上海时区 ts_converted = ts_localized.dt.tz_convert("Asia/Shanghai") print("\nConverted to Asia/Shanghai:\n", ts_converted)
时间序列的重采样(Resampling)是一种改变时间序列数据频率的常用技术。它可以是降采样(减少数据点,如从日到月)或升采样(增加数据点,如从月到日)。重采样通常用于聚合数据或使数据符合特定的时间频率。
参数说明:
参数 |
描述 |
rule |
重采样频率,如 'D'(天)、'M'(月)、'A'(年)等。 |
axis |
应用重采样的轴。 |
closed |
在降采样中,定义区间的闭合端。 |
label |
在降采样中,如何标记聚合结果的时间标签。 |
convention |
当重采样时期索引时,用于确定时期的约定。 |
kind |
聚合到时间戳('timestamp')还是时期('period')。 |
loffset |
对结果索引的偏移量。 |
base |
对于每个时间窗口,基时间的偏移量。 |
on |
在 DataFrame 上,用于重采样的列。 |
level |
在多级索引的特定级别上重采样。 |
使用示例:Python Pandas 时间序列分析 日期时间的处理和转换-CJavaPy