Table of Contents
import pandas as pd
import numpy as np
from sklearn.preprocessing import OneHotEncoder
时间(戳)的格式化
data=pd.read_csv(r"D:\downloads\tempo使用1.csv",encoding='gbk')
data.head()
  
    
       | 
      SYS_NAME | 
      CWXT_DB184C | 
      COLLECTTIME | 
    
  
  
    
      | 0 | 
      财务管理系统 | 
      34270787.33 | 
      2014-10-01 | 
    
    
      | 1 | 
      财务管理系统 | 
      34328899.02 | 
      2014-10-02 | 
    
    
      | 2 | 
      财务管理系统 | 
      34327553.50 | 
      2014-10-03 | 
    
    
      | 3 | 
      财务管理系统 | 
      34288672.21 | 
      2014-10-04 | 
    
    
      | 4 | 
      财务管理系统 | 
      34190978.41 | 
      2014-10-05 | 
    
  
 
pd.to_datetime(data['COLLECTTIME'])[0]
Timestamp('2014-10-01 00:00:00')
data['date']=pd.to_datetime(data['COLLECTTIME'],format="%Y-%m-%d")#数据格式化输出
data.head()
  
    
       | 
      SYS_NAME | 
      CWXT_DB184C | 
      COLLECTTIME | 
      date | 
    
  
  
    
      | 0 | 
      财务管理系统 | 
      34270787.33 | 
      2014-10-01 | 
      2014-10-01 | 
    
    
      | 1 | 
      财务管理系统 | 
      34328899.02 | 
      2014-10-02 | 
      2014-10-02 | 
    
    
      | 2 | 
      财务管理系统 | 
      34327553.50 | 
      2014-10-03 | 
      2014-10-03 | 
    
    
      | 3 | 
      财务管理系统 | 
      34288672.21 | 
      2014-10-04 | 
      2014-10-04 | 
    
    
      | 4 | 
      财务管理系统 | 
      34190978.41 | 
      2014-10-05 | 
      2014-10-05 | 
    
  
 
提取时间特征:年、月、日、季度等
data['quarter']=data['date'].dt.quarter#提取季度
data.head()
  
    
       | 
      SYS_NAME | 
      CWXT_DB184C | 
      COLLECTTIME | 
      date | 
      quarter | 
    
  
  
    
      | 0 | 
      财务管理系统 | 
      34270787.33 | 
      2014-10-01 | 
      2014-10-01 | 
      4 | 
    
    
      | 1 | 
      财务管理系统 | 
      34328899.02 | 
      2014-10-02 | 
      2014-10-02 | 
      4 | 
    
    
      | 2 | 
      财务管理系统 | 
      34327553.50 | 
      2014-10-03 | 
      2014-10-03 | 
      4 | 
    
    
      | 3 | 
      财务管理系统 | 
      34288672.21 | 
      2014-10-04 | 
      2014-10-04 | 
      4 | 
    
    
      | 4 | 
      财务管理系统 | 
      34190978.41 | 
      2014-10-05 | 
      2014-10-05 | 
      4 | 
    
  
 
data['month'],data['day']=data['date'].dt.month,data['date'].dt.day#提取月、天
data.head()
  
    
       | 
      SYS_NAME | 
      CWXT_DB184C | 
      COLLECTTIME | 
      date | 
      quarter | 
      month | 
      day | 
    
  
  
    
      | 0 | 
      财务管理系统 | 
      34270787.33 | 
      2014-10-01 | 
      2014-10-01 | 
      4 | 
      10 | 
      1 | 
    
    
      | 1 | 
      财务管理系统 | 
      34328899.02 | 
      2014-10-02 | 
      2014-10-02 | 
      4 | 
      10 | 
      2 | 
    
    
      | 2 | 
      财务管理系统 | 
      34327553.50 | 
      2014-10-03 | 
      2014-10-03 | 
      4 | 
      10 | 
      3 | 
    
    
      | 3 | 
      财务管理系统 | 
      34288672.21 | 
      2014-10-04 | 
      2014-10-04 | 
      4 | 
      10 | 
      4 | 
    
    
      | 4 | 
      财务管理系统 | 
      34190978.41 | 
      2014-10-05 | 
      2014-10-05 | 
      4 | 
      10 | 
      5 | 
    
  
 
data['dayofweek']=data['date'].dt.dayofweek#一周内的第几天
data['weekofyear']=data['date'].dt.week#一年中的第几周
data.head()
  
    
       | 
      SYS_NAME | 
      CWXT_DB184C | 
      COLLECTTIME | 
      date | 
      quarter | 
      month | 
      day | 
      dayofweek | 
      weekofyear | 
    
  
  
    
      | 0 | 
      财务管理系统 | 
      34270787.33 | 
      2014-10-01 | 
      2014-10-01 | 
      4 | 
      10 | 
      1 | 
      2 | 
      40 | 
    
    
      | 1 | 
      财务管理系统 | 
      34328899.02 | 
      2014-10-02 | 
      2014-10-02 | 
      4 | 
      10 | 
      2 | 
      3 | 
      40 | 
    
    
      | 2 | 
      财务管理系统 | 
      34327553.50 | 
      2014-10-03 | 
      2014-10-03 | 
      4 | 
      10 | 
      3 | 
      4 | 
      40 | 
    
    
      | 3 | 
      财务管理系统 | 
      34288672.21 | 
      2014-10-04 | 
      2014-10-04 | 
      4 | 
      10 | 
      4 | 
      5 | 
      40 | 
    
    
      | 4 | 
      财务管理系统 | 
      34190978.41 | 
      2014-10-05 | 
      2014-10-05 | 
      4 | 
      10 | 
      5 | 
      6 | 
      40 | 
    
  
 
a=pd.to_datetime('2020-1-1')
判断开始、结束
#判断开始、结束
print(a.is_year_end,
a.is_year_start,
a.is_month_end,
a.is_month_start,
a.is_quarter_start,
a.is_quarter_end)
False True False True True False
data['hour']=data['date'].dt.hour
data.head()
  
    
       | 
      SYS_NAME | 
      CWXT_DB184C | 
      COLLECTTIME | 
      date | 
      quarter | 
      month | 
      day | 
      dayofweek | 
      weekofyear | 
      hour | 
    
  
  
    
      | 0 | 
      财务管理系统 | 
      34270787.33 | 
      2014-10-01 | 
      2014-10-01 | 
      4 | 
      10 | 
      1 | 
      2 | 
      40 | 
      0 | 
    
    
      | 1 | 
      财务管理系统 | 
      34328899.02 | 
      2014-10-02 | 
      2014-10-02 | 
      4 | 
      10 | 
      2 | 
      3 | 
      40 | 
      0 | 
    
    
      | 2 | 
      财务管理系统 | 
      34327553.50 | 
      2014-10-03 | 
      2014-10-03 | 
      4 | 
      10 | 
      3 | 
      4 | 
      40 | 
      0 | 
    
    
      | 3 | 
      财务管理系统 | 
      34288672.21 | 
      2014-10-04 | 
      2014-10-04 | 
      4 | 
      10 | 
      4 | 
      5 | 
      40 | 
      0 | 
    
    
      | 4 | 
      财务管理系统 | 
      34190978.41 | 
      2014-10-05 | 
      2014-10-05 | 
      4 | 
      10 | 
      5 | 
      6 | 
      40 | 
      0 | 
    
  
 
判断是否是一天的高峰时段
#是否是一天的高峰时段
data['day_hign']=data['hour'].apply(lambda x:0 if 0<=x<8 else 1)
data.head()
  
    
       | 
      SYS_NAME | 
      CWXT_DB184C | 
      COLLECTTIME | 
      date | 
      quarter | 
      month | 
      day | 
      dayofweek | 
      weekofyear | 
      hour | 
      day_hign | 
    
  
  
    
      | 0 | 
      财务管理系统 | 
      34270787.33 | 
      2014-10-01 | 
      2014-10-01 | 
      4 | 
      10 | 
      1 | 
      2 | 
      40 | 
      0 | 
      0 | 
    
    
      | 1 | 
      财务管理系统 | 
      34328899.02 | 
      2014-10-02 | 
      2014-10-02 | 
      4 | 
      10 | 
      2 | 
      3 | 
      40 | 
      0 | 
      0 | 
    
    
      | 2 | 
      财务管理系统 | 
      34327553.50 | 
      2014-10-03 | 
      2014-10-03 | 
      4 | 
      10 | 
      3 | 
      4 | 
      40 | 
      0 | 
      0 | 
    
    
      | 3 | 
      财务管理系统 | 
      34288672.21 | 
      2014-10-04 | 
      2014-10-04 | 
      4 | 
      10 | 
      4 | 
      5 | 
      40 | 
      0 | 
      0 | 
    
    
      | 4 | 
      财务管理系统 | 
      34190978.41 | 
      2014-10-05 | 
      2014-10-05 | 
      4 | 
      10 | 
      5 | 
      6 | 
      40 | 
      0 | 
      0 | 
    
  
 
构造时间特征
#构造过去n天的统计数据
def get_statis_n_days_num(data,col,n):
    temp=pd.DataFrame()
    for i in range(n):
        temp=pd.concat([temp,data[col].shift((i+1)*24)],axis=1)
        data['avg_'+str(n)+"_days_"+col]=temp.mean(axis=1)
        data['median_'+str(n)+"days"+col]=temp.median(axis=1)
        data['max_'+str(n)+"_days_"+col]=temp.max(axis=1)
        data['min_'+str(n)+"_days_"+col]=temp.min(axis=1)
        data['std'+str(n)+"_days_"+col]=temp.std(axis=1)
    return data
get_statis_n_days_num(data,'CWXT_DB184C',n=7).tail()
d:\software\python\lib\site-packages\numpy\lib\nanfunctions.py:1114: RuntimeWarning: All-NaN slice encountered
  overwrite_input=overwrite_input)
  
    
       | 
      SYS_NAME | 
      CWXT_DB184C | 
      COLLECTTIME | 
      date | 
      quarter | 
      month | 
      day | 
      dayofweek | 
      weekofyear | 
      hour | 
      day_hign | 
      avg_7_days_CWXT_DB184C | 
      median_7daysCWXT_DB184C | 
      max_7_days_CWXT_DB184C | 
      min_7_days_CWXT_DB184C | 
      std7_days_CWXT_DB184C | 
    
  
  
    
      | 36 | 
      财务管理系统 | 
      35606941.11 | 
      2014-11-06 | 
      2014-11-06 | 
      4 | 
      11 | 
      6 | 
      3 | 
      45 | 
      0 | 
      0 | 
      34328674.80 | 
      34328674.80 | 
      34328674.80 | 
      34328674.80 | 
      NaN | 
    
    
      | 37 | 
      财务管理系统 | 
      35546714.13 | 
      2014-11-07 | 
      2014-11-07 | 
      4 | 
      11 | 
      7 | 
      4 | 
      45 | 
      0 | 
      0 | 
      34234933.61 | 
      34234933.61 | 
      34234933.61 | 
      34234933.61 | 
      NaN | 
    
    
      | 38 | 
      财务管理系统 | 
      35510966.73 | 
      2014-11-08 | 
      2014-11-08 | 
      4 | 
      11 | 
      8 | 
      5 | 
      45 | 
      0 | 
      0 | 
      34022726.41 | 
      34022726.41 | 
      34022726.41 | 
      34022726.41 | 
      NaN | 
    
    
      | 39 | 
      财务管理系统 | 
      35491498.51 | 
      2014-11-09 | 
      2014-11-09 | 
      4 | 
      11 | 
      9 | 
      6 | 
      45 | 
      0 | 
      0 | 
      35016309.47 | 
      35016309.47 | 
      35016309.47 | 
      35016309.47 | 
      NaN | 
    
    
      | 40 | 
      财务管理系统 | 
      35601990.55 | 
      2014-11-10 | 
      2014-11-10 | 
      4 | 
      11 | 
      10 | 
      0 | 
      46 | 
      0 | 
      0 | 
      34981412.82 | 
      34981412.82 | 
      34981412.82 | 
      34981412.82 | 
      NaN | 
    
  
 
时间差及其转换
a=pd.to_datetime('2020-07-21 12:12:01')
b=pd.to_datetime('2020-07-20 12:12:23')
c=pd.to_datetime('2020-07-21 00:12:01')
d=pd.to_datetime('2020-07-21 01:00:01')
a-b#计算时间差
Timedelta('0 days 23:59:38')
(a-c)
Timedelta('0 days 12:00:00')
#将时间差,转换成秒
(a-c).seconds
43200
(d-c).seconds
2880
# 跨天转化秒时容易出错
(a-b).seconds
86378
def calTimesDiff(t1, t2):
    """
    计算时间戳之间的差值,单位h(同一天)
    :param t1:
    :param t2:
    :return:
    """
    # 1.先转成秒
    # 2.再将秒转换成小时
    t1_seconds = str(t1).split()[-1].split(":")
    t1_seconds = sum([int(i) * 60 ** (2 - num) for num, i in enumerate(t1_seconds)])
    t2_seconds = str(t2).split()[-1].split(":")
    t2_seconds = sum([int(i) * 60 ** (2 - num) for num, i in enumerate(t2_seconds)])
    return abs(round((t2_seconds - t1_seconds) / 3600, 3))
calTimesDiff(d,c)
0.8
a-b#计算时间差
Timedelta('0 days 23:59:38')
#将a-b转换成小时
def convertTimestampToSec(a_b):
    """
    将时间差转换成秒
    """
    a_b_str=str(a_b).split()
    day=int(a_b_str[0])
    sec=sum([int(i)*60**(2-num) for num,i in enumerate(a_b_str[-1].split(":"))])
    res=day*24*3600+sec
    return res
convertTimestampToSec(a-b)#23*3600+59*60+38
86378
时间的前进与后退
pd.Timedelta
help(pd.Timedelta)
class Timedelta(_Timedelta)
 |  Represents a duration, the difference between two dates or times.
 |  
 |  Timedelta is the pandas equivalent of python's ``datetime.timedelta``
 |  and is interchangeable with it in most cases.
 |  
 |  Parameters
 |  ----------
 |  value : Timedelta, timedelta, np.timedelta64, string, or integer
 |  unit : str, default 'ns'
 |      Denote the unit of the input, if input is an integer.
 |  
 |      Possible values:
 |  
 |      * 'Y', 'M', 'W', 'D', 'T', 'S', 'L', 'U', or 'N'
 |      * 'days' or 'day'
 |      * 'hours', 'hour', 'hr', or 'h'
 |      * 'minutes', 'minute', 'min', or 'm'
 |      * 'seconds', 'second', or 'sec'
 |      * 'milliseconds', 'millisecond', 'millis', or 'milli'
 |      * 'microseconds', 'microsecond', 'micros', or 'micro'
 |      * 'nanoseconds', 'nanosecond', 'nanos', 'nano', or 'ns'.
a+pd.Timedelta(2,unit='days')
Timestamp('2020-07-23 12:12:01')
a+pd.Timedelta(2,unit='m')
Timestamp('2020-07-21 12:14:01')
pd.DateOffset
help(pd.DateOffset)`也具有的类似的功能:但是需要注意关键词单复数的区别:
Parameters that **add** to the offset (like Timedelta):
 |  
 |      - years
 |      - months
 |      - weeks
 |      - days
 |      - hours
 |      - minutes
 |      - seconds
 |      - microseconds
 |      - nanoseconds
 |  
Parameters that **replace** the offset value:
 |  
 |      - year
 |      - month
 |      - day
 |      - weekday
 |      - hour
 |      - minute
 |      - second
 |      - microsecond
 |      - nanosecond.
    
a+pd.DateOffset(days=1)
Timestamp('2020-07-22 12:12:01')
b+pd.DateOffset(day=1)
Timestamp('2020-07-01 12:12:23')