模块六-数据合并与连接——36. 时间序列基础
2026/5/17 0:36:25 网站建设 项目流程

36. 时间序列基础

1. 概述

时间序列是按时间顺序排列的数据点。Pandas 提供了强大的时间序列处理功能,包括日期范围生成、时间索引、日期提取等,是金融、气象、销售等数据分析的基础。

importpandasaspdimportnumpyasnpimportmatplotlib.pyplotasplt# 设置中文字体plt.rcParams['font.sans-serif']=['SimHei','Arial Unicode MS']plt.rcParams['axes.unicode_minus']=False# 创建示例数据np.random.seed(42)

2. 日期时间类型

2.1 转换为 datetime 类型

# 创建包含日期字符串的数据df=pd.DataFrame({'日期':['2024-01-01','2024-01-02','2024-01-03','2024-01-04','2024-01-05'],'销售额':[100,150,120,180,200]})print("原始数据类型:")print(df.dtypes)# 转换为 datetime 类型df['日期']=pd.to_datetime(df['日期'])print("\n转换后数据类型:")print(df.dtypes)# 设置日期为索引df.set_index('日期',inplace=True)print("\n设置日期索引后:")print(df)

2.2 多种日期格式解析

# 不同格式的日期字符串date_strings=pd.Series(['2024-01-01','2024/01/02','01-03-2024','2024年01月04日','Jan 5, 2024'])print("原始字符串:")print(date_strings)# 自动解析多种格式parsed_dates=pd.to_datetime(date_strings)print("\n解析后:")print(parsed_dates)

3. 生成日期范围

3.1 date_range() 基础

# 按天生成daily=pd.date_range(start='2024-01-01',end='2024-01-10',freq='D')print("每日日期:")print(daily)# 按小时生成hourly=pd.date_range(start='2024-01-01',periods=10,freq='H')print("\n每小时日期:")print(hourly)# 按分钟生成minutely=pd.date_range(start='2024-01-01 09:00:00',periods=10,freq='T')print("\n每分钟日期:")print(minutely)

3.2 常用频率代码

代码说明示例
D日历日freq='D'
B工作日freq='B'
H小时freq='H'
Tmin分钟freq='T'
Sfreq='S'
W周(周日)freq='W'
W-MON周一freq='W-MON'
M月末freq='M'
MS月初freq='MS'
Q季末freq='Q'
QS季初freq='QS'
A年末freq='A'
AS年初freq='AS'
# 工作日business_days=pd.date_range(start='2024-01-01',periods=10,freq='B')print("工作日:")print(business_days)# 每周一mondays=pd.date_range(start='2024-01-01',periods=10,freq='W-MON')print("\n每周一:")print(mondays)# 月末month_end=pd.date_range(start='2024-01-01',periods=6,freq='M')print("\n月末:")print(month_end)# 月初month_start=pd.date_range(start='2024-01-01',periods=6,freq='MS')print("\n月初:")print(month_start)

4. DatetimeIndex 属性

# 创建时间序列数据dates=pd.date_range('2024-01-01',periods=30,freq='D')ts=pd.Series(np.random.randn(30),index=dates)print("时间序列:")print(ts.head())# 提取日期各部分print(f"\n年份:{ts.index.year}")print(f"月份:{ts.index.month}")print(f"日期:{ts.index.day}")print(f"星期几(数字):{ts.index.dayofweek}")print(f"星期几(名称):{ts.index.day_name()}")print(f"年中的第几天:{ts.index.dayofyear}")print(f"季度:{ts.index.quarter}")print(f"是否月末:{ts.index.is_month_end}")print(f"是否月初:{ts.index.is_month_start}")

5. 时间索引的选择

# 创建时间序列dates=pd.date_range('2024-01-01',periods=100,freq='D')ts=pd.Series(np.random.randn(100),index=dates)# 按年份选择print("2024年数据:")print(ts['2024'])# 按年月选择print("\n2024年1月数据:")print(ts['2024-01'])# 按日期范围选择print("\n2024-01-15 到 2024-01-20:")print(ts['2024-01-15':'2024-01-20'])# 按年份范围选择print("\n2024年第一季度:")print(ts['2024-01':'2024-03'])

6. 完整示例:股票价格分析

# 创建股票价格数据np.random.seed(42)dates=pd.date_range('2024-01-01',periods=200,freq='D')# 模拟股价(随机游走)returns=np.random.normal(0.001,0.02,200)prices=100*(1+returns).cumprod()stock=pd.DataFrame({'收盘价':prices,'成交量':np.random.randint(10000,100000,200),'涨跌幅':returns*100},index=dates)print("="*60)print("股票价格分析")print("="*60)print("\n原始数据:")print(stock.head())print(f"数据周期:{stock.index[0]}{stock.index[-1]}")# 1. 提取时间特征stock['年份']=stock.index.year stock['月份']=stock.index.month stock['星期']=stock.index.day_name()stock['季度']=stock.index.quarterprint("\n1. 添加时间特征:")print(stock.head())# 2. 按月统计print("\n2. 月度统计:")monthly_stats=stock.resample('M').agg({'收盘价':['mean','max','min'],'成交量':'sum'})print(monthly_stats.head())# 3. 按星期统计print("\n3. 各星期表现:")weekday_stats=stock.groupby('星期')['涨跌幅'].mean()print(weekday_stats)# 4. 季度收益print("\n4. 季度收益:")quarterly_returns=stock['收盘价'].resample('Q').last().pct_change()*100print(quarterly_returns)

7. 常见频率代码速查表

代码说明别名
D日历日'day'
B工作日'business'
H小时'hour'
T分钟'min','minute'
S'second'
L毫秒'ms'
U微秒'us'
W'week'
M月末'month'
Q季末'quarter'
A年末'year'

8. 总结

操作方法示例
字符串转日期pd.to_datetime()pd.to_datetime(df['date'])
生成日期范围pd.date_range()pd.date_range('2024-01-01', periods=10, freq='D')
设置日期索引df.set_index()df.set_index('date', inplace=True)
提取年份dt.yeardf.index.year
提取月份dt.monthdf.index.month
提取星期dt.day_name()df.index.day_name()
按年份选择df['2024']ts['2024']
按年月选择df['2024-01']ts['2024-01']
按范围选择df['start':'end']ts['2024-01-01':'2024-01-31']

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询