7.1 时间序列数据类型 (DatetimeIndex)


文档摘要

7.1 时间序列数据类型 (DatetimeIndex) Pandas 时间序列数据类型 (DatetimeIndex) 详解 时间序列数据在金融、科学、工程等领域广泛存在。Pandas 提供了强大的时间序列处理功能,其中 是核心。 是一种专门用于存储日期和时间的数据结构,它是 Pandas 和 的索引类型,能够极大地简化时间序列数据的分析和操作。 7.1.1 DatetimeIndex 的作用 时间序列索引: 使得使用时间作为索引成为可能,方便按时间段选取数据、进行时间相关的计算。 时间对齐: 在合并或比较多个时间序列数据时, 可以自动对齐时间戳,避免数据错位。 时间序列分析: Pandas 提供了许多基于 的时间序列分析函数,如重采样、滑动窗口统计等。

7.1 时间序列数据类型 (DatetimeIndex)

Pandas 时间序列数据类型 (DatetimeIndex) 详解

时间序列数据在金融、科学、工程等领域广泛存在。Pandas 提供了强大的时间序列处理功能,其中 DatetimeIndex 是核心。DatetimeIndex 是一种专门用于存储日期和时间的数据结构,它是 Pandas SeriesDataFrame 的索引类型,能够极大地简化时间序列数据的分析和操作。

7.1.1 DatetimeIndex 的作用

  • 时间序列索引: DatetimeIndex 使得使用时间作为索引成为可能,方便按时间段选取数据、进行时间相关的计算。

  • 时间对齐: 在合并或比较多个时间序列数据时,DatetimeIndex 可以自动对齐时间戳,避免数据错位。

  • 时间序列分析: Pandas 提供了许多基于 DatetimeIndex 的时间序列分析函数,如重采样、滑动窗口统计等。

  • 高效存储: 相比于将时间戳存储为字符串或其他类型,DatetimeIndex 在存储和计算上更高效。

7.1.2 创建 DatetimeIndex

有多种方式可以创建 DatetimeIndex

  1. 使用 pd.date_range()

    这是最常用的方法,可以生成指定范围内的日期序列。

    import pandas as pd # 生成从 2023-01-01 开始,到 2023-01-10 结束,每天的时间序列 date_index = pd.date_range(start='2023-01-01', end='2023-01-10') print(date_index) # 生成从 2023-01-01 开始,长度为 10,每天的时间序列 date_index = pd.date_range(start='2023-01-01', periods=10) print(date_index) # 生成从 2023-01-01 开始,到 2023-01-31 结束,每周的时间序列 date_index = pd.date_range(start='2023-01-01', end='2023-01-31', freq='W') print(date_index) # 生成从 2023-01-01 开始,到 2023-01-31 结束,每小时的时间序列 date_index = pd.date_range(start='2023-01-01', end='2023-01-02', freq='H') print(date_index)

    pd.date_range() 的常用参数:

    • start: 起始日期,字符串或 datetime 对象。

    • end: 结束日期,字符串或 datetime 对象。

    • periods: 生成的时间戳数量。

    • freq: 频率,例如 'D' (天), 'W' (周), 'M' (月), 'H' (小时), 'T' (分钟), 'S' (秒)。

    频率字符串:

    频率字符串 含义
    'D'
    'W'
    'M' 月末
    'MS' 月初
    'Q' 季度末
    'QS' 季度初
    'A' 年末
    'AS' 年初
    'H' 小时
    'T' 或 'min' 分钟
    'S'
  2. 使用 pd.to_datetime()

    将字符串、整数或其他可以转换为日期时间格式的数据转换为 DatetimeIndex

    dates = ['2023-01-01', '2023-01-02', '2023-01-03'] date_index = pd.to_datetime(dates) print(date_index) # 从整数时间戳转换 timestamps = [1672531200, 1672617600, 1672704000] # Unix 时间戳 date_index = pd.to_datetime(timestamps, unit='s') # unit='s' 表示秒 print(date_index)
  3. 直接创建:

    可以使用 datetime 对象列表直接创建 DatetimeIndex

    import datetime dates = [datetime.datetime(2023, 1, 1), datetime.datetime(2023, 1, 2)] date_index = pd.DatetimeIndex(dates) print(date_index)

7.1.3 DatetimeIndex 的属性和方法

DatetimeIndex 提供了许多有用的属性和方法,用于获取日期时间信息和进行时间序列操作。

  • 属性:

    • .year, .month, .day, .hour, .minute, .second: 提取年、月、日、时、分、秒。

    • .dayofweek, .dayofyear, .quarter: 提取星期几(0-6,0 表示星期一)、一年中的第几天、季度。

    • .is_leap_year: 判断是否为闰年。

  • 方法:

    • .strftime(format): 将日期时间格式化为字符串。

    • .normalize(): 将时间设置为午夜(00:00:00)。

    • .tz_localize(tz): 本地化时区。

    • .tz_convert(tz): 转换时区。

    date_index = pd.date_range(start='2023-01-01', periods=3) print(date_index.year) print(date_index.month) print(date_index.dayofweek) print(date_index.strftime('%Y-%m-%d')) # 时区操作 date_index = pd.date_range(start='2023-01-01', periods=3) date_index_utc = date_index.tz_localize('UTC') print(date_index_utc) date_index_tokyo = date_index_utc.tz_convert('Asia/Tokyo') print(date_index_tokyo)

7.1.4 将 DatetimeIndex 应用于 Series 和 DataFrame

创建 DatetimeIndex 后,可以将其设置为 SeriesDataFrame 的索引。

import numpy as np # 创建一个 Series dates = pd.date_range('2023-01-01', periods=5) data = np.random.randn(5) series = pd.Series(data, index=dates) print(series) # 创建一个 DataFrame data = np.random.randn(5, 2) df = pd.DataFrame(data, index=dates, columns=['A', 'B']) print(df) # 使用 DatetimeIndex 进行数据选择 print(series['2023-01-02']) # 选择特定日期的数据 print(df['2023-01-01':'2023-01-03']) # 选择日期范围内的数据

7.1.5 DatetimeIndex 的应用场景

  1. 股票数据分析:

    可以使用 DatetimeIndex 作为股票数据的索引,方便按时间段选取数据、计算移动平均线等。

  2. 气象数据分析:

    可以使用 DatetimeIndex 作为气象数据的索引,方便按时间段选取数据、分析气温变化趋势等。

  3. 日志数据分析:

    可以使用 DatetimeIndex 作为日志数据的索引,方便按时间段选取数据、统计事件发生频率等。

7.1.6 DatetimeIndex 的可视化

可以使用 Matplotlib 或 Seaborn 等库将基于 DatetimeIndex 的时间序列数据可视化。

import matplotlib.pyplot as plt # 绘制时间序列图 series.plot() plt.xlabel('Date') plt.ylabel('Value') plt.title('Time Series Data') plt.show()

7.1.7 DatetimeIndex 的性能优化

  • 使用正确的 dtype 确保日期时间数据使用 datetime64[ns] dtype,避免使用 object dtype

  • 避免不必要的类型转换: 尽量避免在日期时间数据和字符串之间进行频繁的类型转换。

  • 使用 Pandas 提供的函数: 尽量使用 Pandas 提供的日期时间函数,它们通常比 Python 标准库中的函数更高效。

7.1.8 DatetimeIndex 的总结

DatetimeIndex 是 Pandas 中处理时间序列数据的核心。通过灵活的创建方式、丰富的属性和方法,以及与其他 Pandas 功能的无缝集成,DatetimeIndex 使得时间序列数据的分析和操作变得更加简单高效。

Mermaid 图示

代码示例:使用 DatetimeIndex 进行重采样

import pandas as pd import numpy as np # 创建示例数据 dates = pd.date_range('2023-01-01', periods=100, freq='D') data = np.random.randn(100) ts = pd.Series(data, index=dates) # 重采样到每周,计算每周的平均值 weekly_average = ts.resample('W').mean() print(weekly_average) #重采样到每月,计算每月的总和 monthly_sum = ts.resample('M').sum() print(monthly_sum) #重采样到每季度,计算每季度的标准差 quarterly_std = ts.resample('Q').std() print(quarterly_std) # 可以链式操作 quarterly_summary = ts.resample('Q').mean().resample('2Q').mean() # 每两个季度求一次平均值 print(quarterly_summary)

代码示例:使用 DatetimeIndex 进行时间序列切片

import pandas as pd import numpy as np # 创建示例数据 dates = pd.date_range('2023-01-01', periods=365, freq='D') data = np.random.randn(365) ts = pd.Series(data, index=dates) # 选择 2023 年 3 月份的数据 march_data = ts['2023-03'] print(march_data) # 选择 2023 年 6 月 15 日之后的数据 after_june_15 = ts['2023-06-15':] print(after_june_15) # 选择 2023 年 1 月到 3 月的数据 jan_to_march = ts['2023-01':'2023-03'] print(jan_to_march)

希望这篇文章能够帮助你更好地理解和使用 Pandas 中的 DatetimeIndex


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U