2人参与 • 2025-04-26 • Python
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内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论