前面花时间整理了一下Python中时间格式的几个基础模块的用法,主要是针对时间格式的表达及转换。不过发现有些冗余不好找,因此整一个速查的版本方便自己快速复制粘贴。
一般只用datetime
这个库即可
1 2 3
| from datetime import datetime, date, hour from datetime import timedelta import pandas as pd
|
常规时间格式处理
转换,将根据字符串的模式匹配并生成时间格式
时间格式之后就可以按照自己的要求进行转换
1 2 3 4 5 6 7 8 9 10
| dt = datetime.strptime("21/11/06 16:30:00", "%d/%m/%y %H:%M:%S") dt = datetime.strptime("21/11/06 16", "%d/%m/%y %H") year,month, udate = dt.year, dt.month, dt.date()
t_str = dt.strftime("%Y-%m-%d %H:%M:%S") t_str = dt.strftime("%Y-%m-%d %H") t_str = dt.strftime("%Y/%m/%d")
time_bj = time_utc+ timedelta(hours=8)
|
pandas时间序列处理
建议是写出文件的时候转成字符串,在读取处理的时候则使用datetime格式便于计算和绘图等等
时间格式转换
1 2 3 4 5 6 7
| df = pd.read_csv(filepath, parse_dates=['time','date'], encoding = 'utf-8')
df['time']=pd.to_datetime(df['time_str'].astype(str), format='%Y/%m/%d')
df['time_str']=df['time'].astype(str) df['time_str'] = df['time'].dt.strftime('%m-%d-%Y')
|
时间序列的拆分合并,注意是字符串还是时间格式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| df = pd.DataFrame({'year': [2015, 2016],'month': [2, 3],'day': [4, 5],'hour':[10,20]})
df['date'] = pd.to_datetime(df[['year','month','day']]) df['datetime'] = pd.to_datetime(df.date) + pd.to_timedelta(df.hour, unit='h')
df['date'] = df['time'].dt.strftime('%Y-%m-%d') df['month'] = df['time'].dt.strftime('%m') df['day'] = df['time'].dt.strftime('%d') df['hour'] = df['time'].dt.strftime('%H') df['date'] = df['time'].dt.strftime('%x')
df['date'] = df['time'].dt.strftime('%Y-%m-%d').astype('datetime64') df['date'] = pd.to_datetime(df_grid['time'].dt.strftime('%Y-%m-%d')) df['month'] = df['time'].dt.strftime('%m').astype('int') df['day'] = df['time'].dt.strftime('%d').astype('int') df['hour'] = df['time'].dt.strftime('%H').astype('int')
|
时间序列范围筛选
1 2 3 4 5
| df2 = df.loc[(df.time > pd.datetime(2017,8,23,5)) & (df.time <= pd.datetime(2017,8,27,23))] df2 = df.loc[(df.time < pd.datetime(2017,8,23,6)) | (df.time > pd.datetime(2017,8,27,0))]
df2 = df.loc[(df.time > '2017-08-20 00:00:00') & (df.time < '2017-08-26 00:00:00')]
|
创建序列
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
df['time'] = pd.date_range(start='1/1/2018', end='1/08/2018', freq='D') pd.date_range(start='1/1/2018', end='1/08/2018') pd.date_range(start='1/1/2018', periods=8) pd.date_range(start='1/1/2018', periods=8, freq='2M') pd.date_range(start='2018-01-01', end='2018-02-01', freq='3H') pd.date_range(start='2017-01-01', end='2018-01-01', closed='left')
pd.date_range(start='2017-01-01', end='2017-02-01', inclusive='left')
pd.date_range(start='2017-01-01', end='2017-02-01', inclusive='left', freq='H')
pd.date_range(start='2020-07-17', end='2020-07-21',freq='D').strftime("%Y-%m-%d").to_list()
|
计算脚本时长
对于python .py
脚本
1 2 3 4 5
| import time start_time = time.time() main() seconds = time.time() - start_time print('Time Taken:', time.strftime("%H:%M:%S",time.gmtime(seconds)))
|
对于jupyter notebook/lab, 运行单元格加一行,如果是vscode则不需要
1 2
| %%time you process codes...
|