1.时间戳
- 创建时间戳
import numpy as np
import pandas as pd
#创建
print('时刻数据:',pd.Timestamp('2025-6-19'))
#参数freq:Y表示年,M表示月,D表示日
print('时期数据:',pd.Period('2025-6-19',freq='D'))
#批量生成
#参数periods:表示创建多少个时间
index = pd.date_range('2025.06.19',periods=4,freq='M')
print('时刻数据:',index)
index = pd.period_range('2025.06.19',periods=4,freq='M')
print('时期数据:',index)
- 转换方法
import numpy as np
import pandas as pd
dates = pd.to_datetime(['2025.06.19', '2025-6-19', '19/06/2025', '2025/06/19'], format='mixed')
print(dates)
print('######################################')
#时间戳->时间
dt = pd.to_datetime([1899678987],unit='ms')
print(dt)
print('######################################')
#时间差
print(dt + pd.DateOffset(hours=8))
print('######################################')
print(dt + pd.DateOffset(days=8))
print('######################################')
print(dt - pd.DateOffset(days=8))
- 时间戳的索引和切片
import numpy as np
import pandas as pd
index = pd.date_range('2025-6-19',periods=100,freq='D')
print('######################################')
ts = pd.Series(range(len(index)),index=index)
#索引
print(ts['2025-06-21'])
print('######################################')
print(ts['2025-06']) #6月所有值
print('######################################')
#切片
print(ts['2025-06-25':'2025-12-02'])
print('######################################')
#时间戳索引
print(pd.Timestamp('2025-07-21'))
print(ts[pd.Timestamp('2025-07-21')])
print(ts[pd.Timestamp('2025-07-21'):pd.Timestamp('2025-08-21')])
print('######################################')
#date_range
print(ts[pd.date_range('2025-08-11',periods=10,freq='D')])
- 属性
import numpy as np
import pandas as pd
index = pd.date_range('2025-6-19',periods=100,freq='D')
ts = pd.Series(range(len(index)),index=index)
print(ts.index.year) #年
print('################################')
print(ts.index.month) #月
print('################################')
print(ts.index.day) #日
print('################################')
print(ts.index.dayofweek) #星期
print('################################')
2.时间序列常用方法
- 移动:.shift()
- 默认后移1位
- 参数periods:后移位数,正数为后移,负数为前移
import numpy as np
import pandas as pd
index = pd.date_range('2025-6-19',periods=365,freq='D')
ts = pd.Series(np.random.randint(0,500,len(index)),index=index)
print(ts)
print('#############################')
print(ts.shift())
print('#############################')
print(ts.shift(periods=2))
print('#############################')
print(ts.shift(periods=-3))
- 频率转换
import numpy as np
import pandas as pd
index = pd.date_range('2025-6-19',periods=365,freq='D')
ts = pd.Series(np.random.randint(0,500,len(index)),index=index)
print(ts)
print('#############################')
# 天 -> 星期
print(ts.asfreq(pd.tseries.offsets.Week()))
print('#############################')
# 天 -> 月
print(ts.asfreq(pd.tseries.offsets.MonthEnd()))
print('#############################')
# 天 -> 小时:数据从少变多,需要填充空值
print(ts.asfreq(pd.tseries.offsets.Hour(),fill_value=0))
3.重采样(resample):根据日期维度进行数据聚合
按照分钟(T)、小时(H)、日(D)、周(W)、月(M)、年(Y)等作为日期维度
import numpy as np
import pandas as pd
index = pd.date_range('2025-6-19',periods=365,freq='D')
ts = pd.Series(np.random.randint(0,500,len(index)),index=index)
print(ts)
print('#############################')
#以2天为单位进行汇总,求和
print(ts.resample('2D').sum())
print('#############################')
#以2星期为单位进行汇总,求和
print(ts.resample('2W').sum())
print('#############################')
#以3个月(季度)为单位进行汇总,求和
print(ts.resample('3M').sum())
print('#############################')
4.时区
import numpy as np
import pandas as pd
import pytz
index = pd.date_range('2025-6-19 00:00',periods=3,freq='D')
ts = pd.Series(np.random.randn(len(index)),index=index)
print(ts)
print('#############################')
ts = ts.tz_localize(tz='UTC')
print(ts)
print('#############################')
ts = ts.tz_convert(tz='Asia/shanghai')
print(ts)
知识点为听课总结笔记,课程为B站“千锋教育Pandas数据分析从入门到实战,零基础小白保姆级Python数据分析教程”:001_Pandas_Pandas介绍_哔哩哔哩_bilibili