python时间戳(1)

摘要:
它可以在以前使用。将数字相加|-SemiMonthEnd|-MonthEnd|-WweekOfMonth|-QuarterEnd|-QuarderEnd|-YearEnd|-SemiMonthBegin|-MonthBegin|-LastWeekOfMonth |-QuardBegin|-QuarterBegin|-YearBegin|-小时|-分钟|-秒|-现在+MonthEnd#向后移动两个月,这弥补了无法在前一个月的下一个月找到时间戳的问题。注意:错误示例offset=MonthEndoffset。rollforward#结果仍然是时间戳。如果你想到达2020年1月,你只能使用加法。注意:通常,我们不会制作一列时间序列,但会跟随一些数据,即序列和数据帧。您可以使用shift来更改日期。根据需要在两个时间点添加数据的功能相当于range(a,b),因此公式也类似于date_range(start='

一、 时间戳定义:其实就是在历史长河中钉了一个钉子,独一无二不说,还可以用一串数字表示

二、 时间戳怎么产生:

  (1) 可以自己输入

    a. 一个是datetime()## 后面所有datetime都可以按下列方式变为timestamp

1 from datetime import datetime
2 import pandas as pd
3 stamp1=datetime.now()
4 stamp=pd.Timestamp(stamp1)
5 stamp.value
1576506889855183000 
   b. 一个是timestamp()
import pandas as pd
stamp2=pd.Timestamp('2019,12,16')
stamp2.value
1576454400000000000

  (2) 可以从文本中分析出来,分析器为parse(中文解释:做句法分析)

from dateutil.parser import parse
parse('2019-12-10')
datetime.datetime(2019, 12, 10, 0, 0)
年 月 日 小时 分钟
如果不是12月10日而是10月12日呢?
from dateutil.parser import parse
parse('2019-12-10',dayfirst=True)
datetime.datetime(2019, 10, 12, 0, 0)
文本写出花来了怎么变成我想要的日期格式?你告诉它什么是什么就好了
但这需要对基本的日期表达进行说明:
%Y2019(四位数年份)
%y19(二位数年份)
%m12(月份)
%d16(日期)
%H15(24小时制)
%I3(12小时制)
%M06(分钟)
%S14(秒)
%w星期几(0是星期天,6是星期一)
%U一年中第几个星期(从00到53),以星期天为一周的第一天
%W一年中第几个星期(从00到53),以星期一为一周的第一天
%z时区
%F2019-12-16
%D12/16/2019
from datetime import datetime
try_trans='2019#12#10'
datetime.strptime(try_trans,'%Y#%m#%d') ## 分开看是:str(文本) p(变) time(时间)
datetime.datetime(2019, 12, 10, 0, 0)
建议可以直接用parse试一下,基本上python都可以解析
from dateutil.parser import parse
parse('DEC 16,2019 15:02')
datetime.datetime(2019, 12, 16, 15, 2)

三、 时间戳的移动:其实就是拨动手表指针的工作后重新变了一个新的钉子

  (1) 重新找个钉子一次性到位(DateOffset)

    首先看看DateOffset(里面可以加什么频率?)     

 |      - years
 |      - months
 |      - weeks
 |      - days
 |      - hours
 |      - minutes
 |      - seconds
 |      - microseconds
 |      - nanoseconds
from pandas.tseries.offsets import * #关键词分开:t series时间序列/off sets 参照系、定位
now=datetime.now()        ##datetime.datetime(2019, 12, 16, 16, 15, 2, 561839)
now+DateOffset(days=3)#天数相加  Timestamp('2019-12-19 16:34:35.850953')
now+DateOffset(months=3)#月数相加 Timestamp('2020-03-16 16:10:58.030667')

(2) 先定位后滚动 --此方法只能对前一个后一个进行操作
  首先看看有哪些定位?
先把日期点挪到前、中、后,再滚动
| - SemiMonthEnd | - MonthEnd | - WeekOfMonth | - QuarterEnd | - BQuarterEnd | - YearEnd | - BYearEnd |
| - SemiMonthBegin| - MonthBegin| - LastWeekOfMonth| - QuarterBegin| - BQuarterBegin | - YearBegin| - BYearBegin |
##定位
offset=MonthEnd() #月底
## 滚动
offset.rollforward(now) #本月月底 Timestamp('2019-12-31 16:34:35.850953')
offset.rollback(now)#上个月月底 Timestamp('2019-11-30 16:34:35.850953')

##定位
offset=SemiMonthEnd()#月半、月中
##滚动
offset.rollforward(now)#月半、月中到底就是月底 Timestamp('2019-12-31 16:34:35.850953')
offset.rollback(now)# 月半到头就是月中 Timestamp('2019-12-15 16:34:35.850953')

##定位
offset=WeekOfMonth()#位于星期几
##滚动
offset.rollforward(now)#本月第一周的星期几 Timestamp('2020-01-06 16:34:35.850953')
offset.rollback(now)#下个月第一周的星期几 Timestamp('2019-12-02 16:34:35.850953')

##定位
offset=LastWeekOfMonth()#位于星期几
##滚动
offset.rollforward(now)#本月最后一周的星期几 Timestamp('2019-12-30 16:34:35.850953')
offset.rollback(now)#下个月最后一周的星期几
Timestamp('2019-12-02 16:34:35.850953')
(3) 根据习惯日期定位方式定位
首先看看有哪些定位?之前运用的都可以,加上数字即可
| - SemiMonthEnd  | - MonthEnd  | - WeekOfMonth    | - QuarterEnd  | - BQuarterEnd   | - YearEnd  | - BYearEnd   | 
| - SemiMonthBegin| - MonthBegin| - LastWeekOfMonth| - QuarterBegin| - BQuarterBegin | - YearBegin| - BYearBegin |
| - Hour | - Minute | - Second | -
now+MonthEnd(2) #往后挪两个月,这弥补了之前无法定位到当前月的下个月问题 Timestamp('2020-01-31 16:34:35.850953')

注意:错误示范

offset=MonthEnd(2)
offset.rollforward(now) #结果仍然为  Timestamp('2019-12-31 16:34:35.850953'),想要达到2020年1月只能用加的方式

注意:通常情况下我们一般不单独做时间序列单列,都会跟一些数据,也就是series和dataframe,可以使用shift进行日期变更

四、在两个时间点内按要求添加数据

  这个功能就相当于range(a,b),所以公式也很像date_range(start='开头日期’,end='结尾日期‘,periods=递增几次,freq='频率')

  1. date_range(‘开头日期‘,n)

  从开头日期开始一天一天的列出n天

  2. date_range(‘开头日期‘,递增几次,频率)

  频率有以下几种表示方式:

  a. 天以内

  | - 2(按2天递增) |-‘3B’(按3天工作日递增)| - ‘4h’(按四个小时递增) | - '50min'(按五十分钟递增)

  | - '6S'(按六秒递增)| - ‘7ms’(按七毫秒递增)|-‘8U’(按八微秒递增)| - ‘2D4h50min6S7ms8U’ (可以连着写)

pd.date_range('2019-12-16',periods=5,freq='2D4h50min6S7ms8U')
DatetimeIndex(['2019-12-16 00:00:00', '2019-12-18 04:50:06.007008',
               '2019-12-20 09:40:12.014016', '2019-12-22 14:30:18.021024',
               '2019-12-24 19:20:24.028032'],
              dtype='datetime64[ns]', freq='190206007008U')

  b. 周以内

  | - ‘W-TUE’(从开头日期的当天开始,往后第一个星期二开始,按7天递增)

pd.date_range('2019-12-16',periods=5,freq='W-TUE')
DatetimeIndex(['2019-12-17', '2019-12-24', '2019-12-31', '2020-01-07',
               '2020-01-14'],
              dtype='datetime64[ns]', freq='W-TUE')

  c. 月以内

  |-'WOM-3FRI'(从开头日期开始月的第3个星期五,按月递增)

pd.date_range('2019-12-21',periods=5,freq='WOM-3FRI') #注意:如果给出的日期超过本月第三个星期五将跳过本月
DatetimeIndex(['2020-01-17', '2020-02-21', '2020-03-20',
               '2020-04-17'],dtype='datetime64[ns]', freq='WOM-3FRI')

  | -‘6M’(从开头日期的当月月底开始,按六个月递增)| - ‘6BM’(从开头日期的当月最后一个工作日开始,按六个月递增)

pd.date_range('2019-12-21',periods=5,freq='6M') # 注意:与MS的区别
DatetimeIndex(['2019-12-31', '2020-06-30', '2020-12-31', '2021-06-30',
               '2021-12-31'],
              dtype='datetime64[ns]', freq='6M')
pd.date_range('2018-12-21',periods=5,freq='6BM')
DatetimeIndex(['2018-12-31', '2019-06-28', '2019-12-31', '2020-06-30',
               '2020-12-31'],
              dtype='datetime64[ns]', freq='6BM')

  | -‘7MS ’(从开头日期的当月月初开始,按七个月递增)| -‘7BMS’(从开头日期的当月第一个工作日开始,按七个月递增)

pd.date_range('2018-12-21',periods=5,freq='7MS') # 注意:如果给定的日期不是月头开始,那么结果会从下个月月初开始,按七个月递增
DatetimeIndex(['2019-01-01', '2019-08-01', '2020-03-01', '2020-10-01',
               '2021-05-01'],
              dtype='datetime64[ns]', freq='7MS')
pd.date_range('2018-12-21',periods=5,freq='7BMS')
DatetimeIndex(['2019-01-01', '2019-08-01', '2020-03-02', '2020-10-01',
               '2021-05-03'],
              dtype='datetime64[ns]', freq='7BMS')

  d. 季度以内

  | - ‘Q-FEB’(从二月月底开始,按三个月递增)|-‘QS-FEB’(从二月月头开始,按三个月递增)

  | - 'BQ-FEB'(从二月最后一个工作日开始,按三个月递增)|-  'BQS-FEB'(从二月第一个工作日开始,按三个月递增)

pd.date_range('2018-12-01',periods=5,freq='BQ-FEB') 
# Q和QS没什么注意点,但BQ和BQS需要注意,如果给定的日期已经过了当年二月,则系统会从下月的二月开始显示
DatetimeIndex(['2019-02-28', '2019-05-31', '2019-08-30', '2019-11-29',
               '2020-02-28'],
              dtype='datetime64[ns]', freq='BQ-FEB')

  e. 年以内

  | - 'A-FEB'(从开头年份的二月底开始,按年递增)| - ‘BA-FEB’(从开头年份的二月最后一个工作日开始,按年递增

  | - ‘AS-FEB’(从开头年份的二月初开始,按年递增)| - ‘BAS-FEB’(从开头年的二月第一个工作日开始,按年递增)

pd.date_range('2018-12-01',periods=5,freq='AS-FEB') #同上
DatetimeIndex(['2019-02-01', '2020-02-01', '2021-02-01', '2022-02-01',
               '2023-02-01'],
              dtype='datetime64[ns]', freq='AS-FEB')
-----------------
前文中我们看到有些日期已经超过导致递延问题,那么我们如何解决这类问题?
我们可以提取年、月来避免
  • 比如前文中pd.date_range('2018-12-01',periods=5,freq='BQ-FEB') 中的问题从年初开始
import pandas as pd
startDate="2018-12-01"
startDateYear=str(pd.to_datetime(startDate).year)
pd.date_range(startDateYear,periods=5,freq='AS-FEB')
DatetimeIndex(['2018-02-01', '2019-02-01', '2020-02-01', '2021-02-01',
               '2022-02-01'],
              dtype='datetime64[ns]', freq='AS-FEB')
  • 比如前文中pd.date_range('2019-12-21',periods=5,freq='WOM-3FRI') 中的问题从月初开始
import pandas as pd
startDate="2019-12-01"
startDateYear=str(pd.to_datetime(startDate).year)
startDateMonth=str(pd.to_datetime(startDate).month)
year_month=startDateYear+'-'+startDateMonth
pd.date_range(year_month,periods=5,freq='WOM-3FRI') 
DatetimeIndex(['2019-12-20', '2020-01-17', '2020-02-21', '2020-03-20',
               '2020-04-17'],
              dtype='datetime64[ns]', freq='WOM-3FRI')

  3. date_range(‘开头日期‘,‘结束日期’,频率)

  4. date_range('开头日期‘,‘结束日期’,递增几次)

    按天数等分

 



免责声明:文章转载自《python时间戳(1)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇centos关闭swap分区官方:金蝶实际成本在制品分配详解下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

【转】sql 中把datetime转换成string 函数

http://blog.knowsky.com/186776.htm http://www.cnblogs.com/fanadu/archive/2009/01/05/1368825.html 0 Feb 22 2006 4:26PM  CONVERT(CHAR(19), CURRENT_TIMESTAMP, 0) 1  02/22/06  CON...

将时间戳化成int型

今天遇到了一个紧急问题,需要把时间戳转成一个int型,就有了这个小demo #include<cstdio>#include<ctime>#include<cstdlib> intmain() { time_t t; time(&t); t = t + 8 * 3600; tm...

Elastic:在 Grok 中运用 custom pattern 来定义 pattern

我们先来看一下如下的一个日志: 157.97.192.70 2019 09 29 00:39:02.912 myserver Process 107673 Initializing 在上面的日志中,我们可以看到一个日期信息:2019 09 29 00:39:02.912。它是被空格字符串所分开,如果没有正确的 Grok pattern 来帮我们提取的话,我...

(转)HBase 常用Shell命令

转自:http://my.oschina.net/u/189445/blog/595232 hbase shell命令 描述 alter 修改列族(column family)模式 count 统计表中行的数量 create 创建表 describe 显示表相关的详细信息 delete 删除指定对象的值(可以为表,行,列对应的值,...

python 时间模块小结(time and datetime)

一:经常使用的时间方法 1.得到当前时间 使用time模块,首先得到当前的时间戳 In [42]: time.time() Out[42]: 1408066927.208922 将时间戳转换为时间元组 struct_time In [43]: time.localtime(time.time()) Out[43]: time.struct_t...

python 字符串转时间戳datetime 以及儒略日的转换

#coding=utf-8#设a为字符串import timefrom datetime import datetimefrom datetime import timedeltaimport time,pdba = "20110928100000"# Now = datetime.now()#中间过程,一般都需要将字符串转化为时间数组# pdb.set_...