https://www.pypandas.cn/docs/user_guide/timeseries.html
from datetime import date
获取今天日期
date.today()
datetime.date(2020, 6, 9)
day = date(year = 2020,month=8,day= 9)
day
datetime.date(2020, 8, 9)
当数据列为字符串格式,拆分年月日传给date
str1 = '20160809'
y = int(str1[0:4])
m = int(str1[4:6])
d = int(str1[6:8])
date(year = y,month=m,day = d)
datetime.date(2016, 8, 9)
可以进行比较
day_1<day
True
import pandas as pd
l = ['20160809','20160528','20170409','20160527']
l = pd.DataFrame(l)
l.columns = ['time']
l
time | |
---|---|
0 | 20160809 |
1 | 20160528 |
2 | 20170409 |
3 | 20160527 |
字符串列转换为时间类型
a = pd.to_datetime(l['time'])
a
0 2016-08-09
1 2016-05-28
2 2017-04-09
3 2016-05-27
Name: time, dtype: datetime64[ns]
日期最大值
max(a)
Timestamp('2017-04-09 00:00:00')
日期最小值
min(a)
Timestamp('2016-05-27 00:00:00')
由字符串格式转化为日期格式的函数为: datetime.datetime.strptime()
from datetime import datetime
str_1 = '2019:01:30'
str_2 = '2019/1/4 3:40:8'
str_3 = '20200508'
date_1 = datetime.strptime(str_1,'%Y:%m:%d').date()
date_2 = datetime.strptime(str_2,'%Y/%m/%d %H:%M:%S')
date_3 = datetime.strptime(str_3,'%Y%m%d').date()
print(date_1,type(date_1))
print(date_2,type(date_2))
print(date_3)
2019-01-30
2019-01-04 03:40:08
2020-05-08
由日期格式转化为字符串格式的函数为: datetime.datetime.strftime()
print('%a 星期几的简写',date_2.strftime('%a'))
print('%A 星期几的全称',date_2.strftime('%A'))
print('%b 月份的简写',date_2.strftime('%b'))
print('%B 月份的全称',date_2.strftime('%B'))
print('%c 标准的日期的时间串',date_2.strftime('%c'))
print('%d 十进制表示的每月的第几天',date_2.strftime('%d'))
print('%H 24小时制的小时 Hour',date_2.strftime('%H'))
print('%I 12小时制的小时 Hour',date_2.strftime('%I'))
print('%j 十进制表示的每年的第几天',date_2.strftime('%j'))
print('%X 标准的时间串',date_2.strftime('%X'))
print('%x 标准的日期串',date_2.strftime('%x'))
print('%w 十进制表示的星期几',date_2.strftime('%w'))
%a 星期几的简写 Fri
%A 星期几的全称 Friday
%b 月份的简写 Jan
%B 月份的全称 January
%c 标准的日期的时间串 Fri Jan 4 03:40:08 2019
%d 十进制表示的每月的第几天 04
%H 24小时制的小时 Hour 03
%I 12小时制的小时 Hour 03
%j 十进制表示的每年的第几天 004
%X 标准的时间串 03:40:08
%x 标准的日期串 01/04/19
%w 十进制表示的星期几 5
%a 星期几的简写 Weekday name, abbr.
%A 星期几的全称 Weekday name, full
%b 月分的简写 Month name, abbr.
%B 月份的全称 Month name, full
%c 标准的日期的时间串 Complete date and time representation
%d 十进制表示的每月的第几天 Day of the month
%H 24小时制的小时 Hour (24-hour clock)
%I 12小时制的小时 Hour (12-hour clock)
%j 十进制表示的每年的第几天 Day of the year
%m 十进制表示的月份 Month number
%M 十时制表示的分钟数 Minute number
%S 十进制的秒数 Second number
%U 第年的第几周,把星期日做为第一天(值从0到53)Week number (Sunday first weekday)
%w 十进制表示的星期几(值从0到6,星期天为0)weekday number
%W 每年的第几周,把星期一做为第一天(值从0到53) Week number (Monday first weekday)
%x 标准的日期串 Complete date representation (e.g. 13/01/08)
%X 标准的时间串 Complete time representation (e.g. 17:02:10)
%y 不带世纪的十进制年份(值从0到99)Year number within century
%Y 带世纪部分的十制年份 Year number
%z,%Z 时区名称,如果不能得到时区名称则返回空字符。Name of time zone
%% 百分号
def trans(row):
y = int(row[0:4])
m = int(row[4:6])
d = int(row[6:8])
row = date(year = y,month=m,day = d)
print(row)
return row
l.time = l.time.apply(lambda x: trans(x))
year = l.time.apply(lambda x: x.strftime('%y'))
week = l.time.apply(lambda x: x.strftime('%w'))
datetime.timedelta表示时间间隔类,给一个时间点加上此类,即可得到一个新的时间。参数包含days、hours、minutes、seconds、microseconds
import datetime
datetime.timedelta(1, 3661, 10)
datetime.timedelta(days=1, seconds=3661, microseconds=10)
print(datetime.datetime.now()+datetime.timedelta(days=35))
当前时间35天后
2020-07-14 12:02:01.670834
print(datetime.datetime.now()-datetime.timedelta(days=35))
当前时间35天前
2020-05-05 13:38:22.091873
print(datetime.datetime.now()-datetime.timedelta(hours=10))
2020-06-09 03:38:40.842955
print(datetime.datetime.now()-datetime.timedelta(hours=10,days=1))
2020-06-08 03:37:50.283667
pd.date_range() 生成一个时间段
pd.bdate_range() 生成一个时间段,跟date_range()不同,可见下面代码
df.asfreq() 生成以一定时间间隔的序列
tm_rng = pd.date_range('20171231 12:50',periods=5,freq='M')
tm_rng
DatetimeIndex(['2017-12-31 12:50:00', '2018-01-31 12:50:00',
'2018-02-28 12:50:00', '2018-03-31 12:50:00',
'2018-04-30 12:50:00'],
dtype='datetime64[ns]', freq='M')
#向前5天
print(pd.bdate_range(end='20180101',periods=5,freq='D'))
DatetimeIndex(['2017-12-28', '2017-12-29', '2017-12-30', '2017-12-31',
'2018-01-01'],
dtype='datetime64[ns]', freq='D')
#向后5天
print(pd.bdate_range(start='20180101',periods=5,freq='M'))
DatetimeIndex(['2018-01-31', '2018-02-28', '2018-03-31', '2018-04-30',
'2018-05-31'],
dtype='datetime64[ns]', freq='M')
data = pd.Series(['May 20, 2017'])
data = pd.to_datetime(data)
import numpy as np
tm_rng = pd.date_range('2017-12-31 12:00:00',periods=20,freq='5H')
tm_series = pd.Series(np.random.randn(len(tm_rng)), index=tm_rng)
tm_series.asfreq('20D',method='backfill')
2017-12-31 12:00:00 2.044885
Freq: 20D, dtype: float64
tm_series.asfreq('100H')
2017-12-31 12:00:00 2.044885
Freq: 100H, dtype: float64
tm_series['2017-12-31']
2017-12-31 12:00:00 2.044885
2017-12-31 17:00:00 -0.093676
2017-12-31 22:00:00 0.716929
Freq: 5H, dtype: float64
np.random.randn(len(tm_rng))
array([-1.6155695 , 0.53152483, -0.07345457, -0.92749088, -0.34137439,
0.76227308, -1.20065839, 0.86265368, 1.24263623, -1.08166548,
-0.10556186, 0.89598739, 0.55912525, -0.67228985, 1.70480491,
1.95531251, 1.03890583, -0.06595028, -1.32885083, -1.24966029])
pd.Series(pd.period_range('1/1/2011', freq='D', periods=5))
0 2011-01-01
1 2011-01-02
2 2011-01-03
3 2011-01-04
4 2011-01-05
dtype: period[D]
pd.Series(pd.date_range('1/1/2011', freq='D', periods=3))
0 2011-01-01
1 2011-01-02
2 2011-01-03
dtype: datetime64[ns]