pandas -- 01 时间日期,时间重采样

代码 描述
now = datetime.now() 获取当前时间戳
date = datetime(2019, 4, 15) 生成时间戳
index = pd.date_range(‘20190202 14:22:22’, periods=10, normalize=False, freq=‘M’) 生成时间序列
p = pd.period_range(‘2019-01’, periods=10, freq=‘D’) 时间段序列
p = p.asfreq(‘M’, how=‘start’) 修改频率
s1 = s.to_period(freq=‘M’) 修改成时间段序列
s3 = s1.to_timestamp(how=‘end’) 修改成时间戳序列
ts = ts.resample(‘10min’, label=‘right’).sum() 重采样
ts = ts.resample(‘15min’).ohlc() 重采样
df1 = df.resample(‘D’).ffill(3) 向上最多填满三个空白
df = pd.read_csv(path, index_col=‘Date’, parse_dates=True) 读取文件时解析出时间戳
df[‘price’].resample(‘W-FRI’).phlc() 转换成周线数据
import pandas as pd
import numpy as np
from datetime import datetime
from datetime import timedelta


now = datetime.now()
print(now, type(now), '\n', now.year, type(now),'\n', now.month, type(now.month),'\n', now.day, type(now.day))
print(now.strftime('%y/%m/%d %H:%M:%S'), type(now.strftime('%y/%m/%d %H:%M:%S')))        # 将时间戳修改为str,并格式化
print(datetime.strptime('20/03/06 13:56:51', '%y/%m/%d %H:%M:%S'))      # 将字符串修改为时间戳

date1 = datetime(2019, 4, 15)
date2 = datetime(2017, 4, 16)
date = date1 - date2
print(date)
print(date.days, type(date.days), '\n', date.total_seconds(), type(date.total_seconds()), '\n')     # 得到具体的int和float
print(date2 + date, '\n', date1)        # 时间戳的运算
print(date + timedelta(4.5))        # 加上4.5天


s = pd.Series(np.random.randn(2), index=[date1, date2])
print(s)
print(s.index)
print(s.index[0])

datetime_index1 = pd.date_range('20190202', periods=10)     # 生成时间序列方法1
datetime_index2 = pd.date_range('20190202', '20190302')     # 生成时间序列方法2
datetime_index3 = pd.date_range('20190202 14:22:22', periods=10, normalize=False)       # periods频率默认为日,参数3为是否显示时分秒
datetime_index4 = pd.date_range(start='20190202', periods=10, freq='M')       # 以月份为单位,结果会是每个月的最后一天
datetime_index5 = pd.date_range(start='20190202', periods=10, freq='BM')       # 以月份为单位,结果会是每个月的最后一个工作日
datetime_index6 = pd.date_range('20190202', periods=10, freq='4H')      # 频率为4小时
print(datetime_index1, '\n', datetime_index2, '\n', datetime_index3, '\n', datetime_index4, '\n', datetime_index5, '\n', datetime_index6)


p1 = pd.Period(2019)     # 时间戳代表一个时间点,Period代表一个时期,默认单位为年
p2 = pd.Period(2019, freq='M')      # 频率为月
p3 = p2 + 3
p4 = pd.period_range('2019-01', periods=10, freq='D')       # 创建一个时期的序列方法1
p5 = pd.period_range('2019-01', '2019-12', freq='D')       # 创建一个时期的序列方法2
p6 = pd.period_range('2019Q1', periods=10, freq='Q')        # 季度
p7 = p6.asfreq('M', how='start')        # 修改频率
p8 = p7.asfreq('A')     # 修改频率为财年
print(p1, '\n', p2, '\n', p3, '\n', p4, '\n', p5, '\n', p6, '\n', p7, '\n', p8)

s = pd.Series(np.random.randn(5), index=pd.date_range('2019-04-28', periods=5, freq='D'))
print(s)
s1 = s.to_period(freq='M')       # 时间戳的时间序列转化为时期的时间序列,频率也可以转化
print(s1, s1.index)
s2 = s1.groupby(level=0).max()      # level=0根据列来分组,max()是获得每个分组的最大值
print(s2)
s3 = s1.to_timestamp(how='end')     # 按照最后一天取时间戳
print(s3)

ts = pd.Series(np.random.randint(0, 40, 180), index=pd.date_range('2019-04-15 09:30', periods=180, freq='T'))
print(ts)
ts = ts.resample('5min').sum()    # 5分钟为单位重采样,以求和的形式,以开始时间
print(ts)
ts = ts.resample('10min', label='right').sum()      # 以结尾时间
print(ts)
ts = ts.resample('15min').ohlc()        # 以开高收低的方式
print(ts)

ts = pd.Series(np.random.randint(0, 50, 100), index=pd.date_range('2019-04-15', periods=100, freq='D'))
print(ts)
ts1 = ts.groupby(lambda x: x.month).sum()
ts1 = ts.groupby(ts.index.to_period('M')).sum()       # ? todo 搞清楚groupby啥情况
print(ts1)
ts2 = ts.resample('M').sum()
print(ts2)

df = pd.DataFrame(np.random.randint(1, 50, 2), index=pd.date_range('2019-04-15', periods=2, freq='W-FRI'))
print(df, '111111')
df1 = df.resample('D').ffill(3)     # 往前取值装填,最多填三个
print(df1)

# df = pd.read_csv(path, index_col='Date', parse_dates=True)        # parse_dates=True ,在读取过程中会尽力解析成为时间戳
# df['price'].resample('W-FRI').phlc()     # 转换成周线数据

加粗样式

你可能感兴趣的:(pandas -- 01 时间日期,时间重采样)