datetime
模块from datetime import datetime
now = datetime.now(), now.year, now.month, now.day, now.second, now.minute
now属性timedelta
时间差模块delta
: timedelta = datetime(2020, 10, 5) - datetime(2020, 10, 1)
,delta
属性:timedelta.days, timedelta.seconds
from datetime import timedelta
datetime(2020, 10, 5) + 2 * timedelta(5)
当前日期加上两倍时间差后日期str( datetime(2020, 10, 5) )
date.strftime( '%Y-%m-%d' )
格式符号定义图:
str_date = '2020-10-10'
, datetime.strptime( str_date, '%Y-%m-%d' )
以和字符串相应格式转化为日期,此时如果为'%Y/%m'
就会出错,需要完全一致str_dates = ['2020-10-10', '2020-10-11']
[ datetime.strptime(x, '%Y-%m-%d') for x in str_dates ]
dateutil.parse
from dateutil.parse import parse
可以解析绝大多数人类所能理解的日期形式parse('Jan 31, 1997 10:45 PM')
parse('2011-01-03')
parse('6/12/2011', dayfirst=True)日在前月在后
dates = [
datetime(2011, 1, 2), datetime(2011, 1, 5),
datetime(2011, 1, 7), datetime(2011, 1, 8),
datetime(2011, 1, 10), datetime(2011, 1, 12)
]
pd.date_range(start=, end= , period=, freq= )
dates = pd.date_range('2020-10-1', end='2021-10-9', freq='3m') # 定义每3个月显示一次日期,可以指定y,m,w,d,s
dates = pd.date_range('2020-10-1', end='2021-10-9', periods=12) # 等分日期12份
dates = pd.date_range('2020-10-1', periods=10, freq='3d') # 每三天一个周期显示10次日期,可以没有end,但是默认freq为d,
时间序列频率:
所有查看方式对DateFrame
格式也有效,df.loc[ '2020' ]
stamp = ts.index[2], ts[stamp]
ts['1/10/2020'], ts['2020/10/10']
long_ts = pd.Series(np.random.randn(15), index=dates)
2020-10-31 1.443782
2021-01-31 1.381629
2021-04-30 -0.027529
2021-07-31 -0.595590
2021-10-31 0.082549
2022-01-31 0.065526
2022-04-30 0.892626
2022-07-31 -0.444155
2022-10-31 1.860078
2023-01-31 0.836876
2023-04-30 -0.965845
2023-07-31 -1.753131
2023-10-31 0.676550
2024-01-31 0.211722
2024-04-30 0.077153
long_ts['2021'] # 可以查看一段日期,2021全年的日期
long_ts[ datetime(2023, 1,1): ] # 日期切片,查看2023年1.1后所有日期,通过时间格式查看
long_ts[ '20210401':'2023' ] # 日期切片,查看2021年4.1到2023年的所有日期,通过字符串查看
duplicate_date = df.groupby(level = 0)
,然后duplicate_date.mean(), duplicate_date.count()
, 查看具体:duplicate_date.pad()
resample()
对一段时期聚合分组:group = long_ts.resample('y')
,查看具体group.pad()
,计算统计group.sum()
crimes = crime.resample('10Y').sum()
df.shift( -100, freq='y' )
,shift( +/-时间, 单位 )
,造成对日期识别问题原因是:时间的范围In [92]: pd.Timestamp.min
Out[92]: Timestamp('1677-09-21 00:12:43.145225')
In [93]: pd.Timestamp.max
Out[93]: Timestamp('2262-04-11 23:47:16.854775807')
pd.to_datetime( arg, format='%Y-%m-%d' , errors=, )
第一个传入的参数arg
可以为:int, float, str, datetime, list, tuple, 1-d array, Series, DataFrame/dict-like
pd.to_datetime('13000101', format='%Y%m%d', errors='ignore')
datetime.datetime(1300, 1, 1, 0, 0)
pd.to_datetime('13000101', format='%Y%m%d', errors='coerce')
NaT
# 出现情况的原因还是对日期的定义节点上,第一个可以忽略这种错误,第一个严格值守
In [92]: pd.Timestamp.min
Out[92]: Timestamp('1677-09-21 00:12:43.145225')
In [93]: pd.Timestamp.max
Out[93]: Timestamp('2262-04-11 23:47:16.854775807')