Pandas中的日期时间date处理小结

作者:

文章目录
  • 时间戳(timestamp):表示的是一个特定的时刻,比如 2008 年 8 月 8 日下午午 8:00。 时间周期(period):引用特定开始和结束点之间的时间长度;例如,2015 年。时间段通常引用时间间隔的特殊情况,其中每个间隔具有统一的长度并且不重叠(例如,构成每天的 24 小时长的时间段)。 时间增量或间隔(timedelta):引用确切的时间长度(例如,间隔为 22.56 秒)。
  • # 创建示例DataFrame df = pd.DataFrame({ ‘date’: pd.date_range(‘2023-01-01′, periods=5, freq=’D’), ‘value’: [10, 20, 30, 40, 50] }) # 提取年、月、日等属性 df[‘year’] = df[‘date’].dt.year df[‘month’] = df[‘date’].dt.month df[‘day’] = df[‘date’].dt.day df[‘day_of_week’] = df[‘date’].dt.dayofweek # 周一=0, 周日=6 df[‘day_name’] = df[‘date’].dt.day_name() df[‘is_weekend’] = df[‘date’].dt.dayofweek >= 5 print(df)
  • # 创建示例时间序列数据 ts = pd.Series( [1, 2, 3, 4, 5], index=pd.date_range(‘2023-01-01′, periods=5, freq=’D’) ) # 降采样(低频) – 计算每周平均值 weekly = ts.resample(‘W’).mean() print(“Weekly resample:n”, weekly) # 升采样(高频) – 填充缺失值 hourly = ts.resample(‘H’).ffill() print(“Hourly resample (forward fill):n”, hourly.head(10)) # 只显示前10行
  • # 本地化时区 ts = pd.Series( [1, 2, 3], index=pd.date_range(‘2023-01-01′, periods=3, freq=’D’) ) ts = ts.tz_localize(‘UTC’) print(“UTC timezone:n”, ts) # 时区转换 ts_shanghai = ts.tz_convert(‘Asia/Shanghai’) print(“Shanghai timezone:n”, ts_shanghai)
  • # 设置日期为索引 df.set_index(‘date’, inplace=True) # 按年份切片 print(df.loc[‘2023’]) # 按月份切片 print(df.loc[‘2023-01’]) # 按日期范围切片 print(df.loc[‘2023-01-02′:’2023-01-04’])
  • # 读取包含日期时间的数据 # 假设有一个CSV文件包含日期列 # df = pd.read_csv(‘data.csv’, parse_dates=[‘date_column’]) # 处理缺失日期 full_date_range = pd.date_range(start=df.index.min(), end=df.index.max(), freq=’D’) df = df.reindex(full_date_range) # 填充缺失值 df[‘value’] = df[‘value’].fillna(method=’ffill’) # 前向填充 # 计算滚动平均值 df[‘7_day_avg’] = df[‘value’].rolling(window=’7D’).mean() print(df.head(10))
  • 目录
    • Pandas中的日期时间类型
    • 1. 创建日期时间数据
      • 1.1 使用to_datetime()函数
      • 1.2 创建日期范围
    • 2. 访问日期时间属性
      • 3. 日期时间运算
        • 3.1 时间差计算
        • 3.2 日期比较
      • 4. 重采样和时间频率转换
        • 5. 时区处理
          • 6. 日期时间索引操作
            • 7. 实际应用示例
              • 8. 高级技巧
                • 8.1 自定义工作日历
                • 8.2 季度数据处理

              Pandas提供了强大的日期和时间处理功能,这对于时间序列分析至关重要。本教程将介绍Pandas中处理日期时间的主要方法。包括:

              • 日期时间数据的创建和转换
              • 日期时间属性的提取
              • 时间差计算和日期运算
              • 重采样和频率转换
              • 时区处理
              • 基于日期时间的索引操作

              • 时间戳(timestamp):表示的是一个特定的时刻,比如 2008 年 8 月 8 日下午午 8:00。
              • 时间周期(period):引用特定开始和结束点之间的时间长度;例如,2015 年。时间段通常引用时间间隔的特殊情况,其中每个间隔具有统一的长度并且不重叠(例如,构成每天的 24 小时长的时间段)。
              • 时间增量或间隔(timedelta):引用确切的时间长度(例如,间隔为 22.56 秒)。

              import pandas as pd
              
              # 将字符串转换为datetime
              date_str = ['2023-01-01', '2023-01-02', '2023-01-03']
              dates = pd.to_datetime(date_str)
              print(dates)
              

              # 创建日期范围
              date_range = pd.date_range('2023-01-01', periods=5, freq='D')
              print(date_range)
              
              # 带有时区的日期范围
              date_range_tz = pd.date_range('2023-01-01', periods=5, freq='D', tz='Asia/Shanghai')
              print(date_range_tz)
              

              # 创建示例DataFrame
              df = pd.DataFrame({
                  'date': pd.date_range('2023-01-01', periods=5, freq='D'),
                  'value': [10, 20, 30, 40, 50]
              })
              
              # 提取年、月、日等属性
              df['year'] = df['date'].dt.year
              df['month'] = df['date'].dt.month
              df['day'] = df['date'].dt.day
              df['day_of_week'] = df['date'].dt.dayofweek  # 周一=0, 周日=6
              df['day_name'] = df['date'].dt.day_name()
              df['is_weekend'] = df['date'].dt.dayofweek >= 5
              
              print(df)
              

              # 计算时间差
              df['date_diff'] = df['date'] - df['date'].shift(1)
              print(df[['date', 'date_diff']])
              
              # 使用Timedelta进行时间运算
              df['date_plus_2days'] = df['date'] + pd.Timedelta(days=2)
              df['date_plus_3hours'] = df['date'] + pd.Timedelta(hours=3)
              print(df)
              

              # 日期比较
              start_date = pd.to_datetime('2023-01-02')
              df['after_start_date'] = df['date'] > start_date
              print(df[['date', 'after_start_date']])
              

              # 创建示例时间序列数据
              ts = pd.Series(
                  [1, 2, 3, 4, 5],
                  index=pd.date_range('2023-01-01', periods=5, freq='D')
              )
              
              # 降采样(低频) - 计算每周平均值
              weekly = ts.resample('W').mean()
              print("Weekly resample:n", weekly)
              
              # 升采样(高频) - 填充缺失值
              hourly = ts.resample('H').ffill()
              print("Hourly resample (forward fill):n", hourly.head(10))  # 只显示前10行
              

              # 本地化时区
              ts = pd.Series(
                  [1, 2, 3],
                  index=pd.date_range('2023-01-01', periods=3, freq='D')
              )
              ts = ts.tz_localize('UTC')
              print("UTC timezone:n", ts)
              
              # 时区转换
              ts_shanghai = ts.tz_convert('Asia/Shanghai')
              print("Shanghai timezone:n", ts_shanghai)
              

              # 设置日期为索引
              df.set_index('date', inplace=True)
              
              # 按年份切片
              print(df.loc['2023'])
              
              # 按月份切片
              print(df.loc['2023-01'])
              
              # 按日期范围切片
              print(df.loc['2023-01-02':'2023-01-04'])
              

              # 读取包含日期时间的数据
              # 假设有一个CSV文件包含日期列
              # df = pd.read_csv('data.csv', parse_dates=['date_column'])
              
              # 处理缺失日期
              full_date_range = pd.date_range(start=df.index.min(), end=df.index.max(), freq='D')
              df = df.reindex(full_date_range)
              
              # 填充缺失值
              df['value'] = df['value'].fillna(method='ffill')  # 前向填充
              
              # 计算滚动平均值
              df['7_day_avg'] = df['value'].rolling(window='7D').mean()
              
              print(df.head(10))
              

              from pandas.tseries.offsets import CustomBusinessDay
              from pandas.tseries.holiday import USFederalHolidayCalendar
              
              # 使用美国联邦假日日历
              us_bd = CustomBusinessDay(calendar=USFederalHolidayCalendar())
              date_range = pd.date_range('2023-01-01', periods=10, freq=us_bd)
              print("US business days only:n", date_range)
              

              # 创建季度数据
              quarterly = pd.Series(
                  [100, 200, 300, 400],
                  index=pd.date_range('2023-01-01', periods=4, freq='Q')
              )
              
              # 季度开始和结束日期
              print("Quarter start:n", quarterly.index)
              print("Quarter end:n", quarterly.index + pd.offsets.QuarterEnd())

              到此这篇关于Pandas中的日期时间date处理小结的文章就介绍到这了,更多相关Pandas 日期时间date内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客! 

              您可能感兴趣的文章:

              • Pandas中datetime数据类型的使用
              • 关于pandas中的.update()方法解析
              • Python中的Pandas 时间函数 time 、datetime 模块和时间处理基础讲解
              • 关于pandas.date_range()的用法及说明
              • pandas库中to_datetime()方法的使用解析
              • pandas实现datetime64与unix时间戳互转
              • pandas时间序列之pd.to_datetime()的实现
              • python3中datetime库,time库以及pandas中的时间函数区别与详解

              站内搜索