zoukankan      html  css  js  c++  java
  • python 时间处理

    在python中时间数据类型有date(日期)和time(时间)两种数据类型。
    主要用到的模块包含,datetime,time以及calendar模块。

    时间类型

    import datetime as dt
    
    now=dt.datetime.now()
    print(now)
    

    结果为
    2016-10-05 09:11:28.301585

    print(now.year,now.month,now.day)
    

    结果为:
    2016 10 5
    我们也可以用datetime函数直接构造时间

    print(dt.datetime(2010,5,6))
    

    结果为:
    2010-05-06 00:00:00

    time=dt.date(2010,5,6)+dt.timedelta(18)
    print(time)
    

    结果为:
    2010-05-24
    这里timedelta表示时间差,用于时间加减运算。
    下面是时间函数介绍

    时间格式化

    在python中,我们可以通过str以及strftime对时间数据进行格式化。

    time=dt.date(2010,5,6)
    print(str(time))
    print(time.strftime('%y/%m/%d'))
    

    结果为:
    2010-05-06
    10/05/06
    这里str直接对时间进行字符串转换,而strftime则是把时间转换为固定格式
    时间格式具体说明:

    时间序列

    通常情况下,我们的时间数据只是数据中的很小一部分内容,要配合其他数据一起使用,
    这种情况下我们需要用到前面提到过的很多方法配合时间特有的函数一起使用才能起到事半功倍的效果。

    time=pd.Series(np.random.randn(20),
               index=pd.date_range(dt.datetime(2016,1,1),periods=20))
    print(time)
    

    结果为:

    接下来我们就可以正常数据一样多数据进行操作,比如索引、排序等

    print(time[:2])
    

    结果为:

    print(time['2016-01-15'])
    

    结果为:
    1.29540896466

    print(time['2016-01-15':'2016-01-20'])
    

    结果为:

    也可以用time['2016-01']对整个1月份的数据进行索引

    重点说下pandas.date_range()这个函数
    pandas.d 起始日期
    end:为结束日期
    perionds:输入时间范围
    freq:时间间隔形式(年,月,日 )

    data=pd.date_range('2010-01-01','2011-01-01',freq='M')
    print(data)
    

    结果为:
    DatetimeIndex(['2010-01-31', '2010-02-28', '2010-03-31', '2010-04-30',
    '2010-05-31', '2010-06-30', '2010-07-31', '2010-08-31',
    '2010-09-30', '2010-10-31', '2010-11-30', '2010-12-31'],
    dtype='datetime64[ns]', freq='M')

    data=pd.date_range('2010-01-01',periods=5,freq='4D')
    print(data)
    

    结果为:
    DatetimeIndex(['2010-01-01', '2010-01-05', '2010-01-09', '2010-01-13',
    '2010-01-17'],
    dtype='datetime64[ns]', freq='4D')
    下面是详细的时间序列基础频率表

    接下来看下时间偏移

    data=pd.date_range('2010-01-01',periods=5,freq='2D')
    print(data)
    

    结果为:
    DatetimeIndex(['2010-01-01', '2010-01-03', '2010-01-05', '2010-01-07',
    '2010-01-09'],
    dtype='datetime64[ns]', freq='2D')

    print(data.shift(2))
    

    结果为:
    DatetimeIndex(['2010-01-05', '2010-01-07', '2010-01-09', '2010-01-11',
    '2010-01-13'],
    dtype='datetime64[ns]', freq='2D')
    上面shift是对时间进行偏移,初始偏移量跟date_range的freq参数有关,如果shift自带freq,则使用自身参数。

    print(data.shift(2,freq='D'))
    

    结果为:
    DatetimeIndex(['2010-01-03', '2010-01-05', '2010-01-07', '2010-01-09',
    '2010-01-11'],
    dtype='datetime64[ns]', freq='2D')

    接下来我门口看下时间运算

    timepieces=pd.Period('2005-01-01',freq='M')
    print(timepieces+5)
    

    结果为:
    2005-06

    print(pd.Period('2005-01-01','M')-pd.Period('2002-12-01','M'))
    

    结果为:
    25

    timepieces=pd.Period('2005-01',freq='M')
    print((timepieces+5).asfreq('D',how='start').strftime('%Y-%m-%d'))
    

    结果为:
    2005-06-01
    通过asfreq对数据进行频率转换

    time=pd.date_range('2000','2002',freq='M')
    print(time)
    

    结果为:
    DatetimeIndex(['2000-01-31', '2000-02-29', '2000-03-31', '2000-04-30',
    '2000-05-31', '2000-06-30', '2000-07-31', '2000-08-31',
    '2000-09-30', '2000-10-31', '2000-11-30', '2000-12-31',
    '2001-01-31', '2001-02-28', '2001-03-31', '2001-04-30',
    '2001-05-31', '2001-06-30', '2001-07-31', '2001-08-31',
    '2001-09-30', '2001-10-31', '2001-11-30', '2001-12-31'],
    dtype='datetime64[ns]', freq='M')

    print(time.to_period().asfreq('D',how='start'))
    

    结果为:
    PeriodIndex(['2000-01-01', '2000-02-01', '2000-03-01', '2000-04-01',
    '2000-05-01', '2000-06-01', '2000-07-01', '2000-08-01',
    '2000-09-01', '2000-10-01', '2000-11-01', '2000-12-01',
    '2001-01-01', '2001-02-01', '2001-03-01', '2001-04-01',
    '2001-05-01', '2001-06-01', '2001-07-01', '2001-08-01',
    '2001-09-01', '2001-10-01', '2001-11-01', '2001-12-01'],
    dtype='int64', freq='D')
    这里进行了两次转换,首先是类型转换,然后再进行频率转换

    print(time.to_period().asfreq('M',how='start'))
    

    结果为:
    PeriodIndex(['2000-01', '2000-02', '2000-03', '2000-04', '2000-05', '2000-06',
    '2000-07', '2000-08', '2000-09', '2000-10', '2000-11', '2000-12',
    '2001-01', '2001-02', '2001-03', '2001-04', '2001-05', '2001-06',
    '2001-07', '2001-08', '2001-09', '2001-10', '2001-11', '2001-12'],
    dtype='int64', freq='M')

  • 相关阅读:
    Java高级之类结构的认识
    14.8.9 Clustered and Secondary Indexes
    14.8.4 Moving or Copying InnoDB Tables to Another Machine 移动或者拷贝 InnoDB 表到另外机器
    14.8.3 Physical Row Structure of InnoDB Tables InnoDB 表的物理行结构
    14.8.2 Role of the .frm File for InnoDB Tables InnoDB 表得到 .frm文件的作用
    14.8.1 Creating InnoDB Tables 创建InnoDB 表
    14.7.4 InnoDB File-Per-Table Tablespaces
    14.7.2 Changing the Number or Size of InnoDB Redo Log Files 改变InnoDB Redo Log Files的数量和大小
    14.7.1 Resizing the InnoDB System Tablespace InnoDB 系统表空间大小
    14.6.11 Configuring Optimizer Statistics for InnoDB 配置优化统计信息用于InnoDB
  • 原文地址:https://www.cnblogs.com/wkslearner/p/5931959.html
Copyright © 2011-2022 走看看