美文网首页
07.时间处理&抽取

07.时间处理&抽取

作者: 李慕玄 | 来源:发表于2018-07-04 06:16 被阅读0次

    1.时间处理

    1.1 字符型转时间型

    datetime = pandas.to_datetime(dateString, format)
    #dateString:字符型时间列
    #format:时间格式(如下表)
    
    属性 注释
    %Y
    %m
    %d
    %H
    %M
    %S

    1.2 时间格式化

    将时间型数据,按照指定格式,转为字符型数据。

    dateTimeFormat = datetime.dt.strftime(format)
    

    1.3 时间属性抽取

    指从日期格式里面,抽取出部分属性。

    datetime.dt.property
    #datetime:数据框中时间列的列名
    #property:下表属性
    
    属性 注释
    second 1-60:秒,从1开始到60
    minute 1-60:分,从1开始到60
    hour 1-24:时,从1开始到24
    day 1-31:一个月中到第几天,从1开始,最大31
    month 1-12:月,从1开始到12
    year
    weekday 1-7:一周中到第几天,从1开始到7
    import pandas
    data = pandas.read_csv(
        '/users/bakufu/desktop/4.16/data.csv',
        encoding = 'utf-8'        
    )
    Out[4]: 
               电话         注册时间   是否微信
    0      166412894295   2011/1/1    否
    1      166416795207   2011/1/1    否
    2      166423353436   2011/1/1    是
    3      166424978309   2011/1/1    是
    4      166450811715   2011/1/1    否
    5      166450811771   2011/1/1    否
    6      166450811789   2011/1/1    是
    7      166450811792   2011/1/1    是
    
    data['时间'] = pandas.to_datetime(
        data.注册时间,
        format='%Y/%m/%d'        
    )
    Out[6]: 
             电话          注册时间  是否微信    时间
    0      166412894295   2011/1/1    否 2011-01-01
    1      166416795207   2011/1/1    否 2011-01-01
    2      166423353436   2011/1/1    是 2011-01-01
    3      166424978309   2011/1/1    是 2011-01-01
    4      166450811715   2011/1/1    否 2011-01-01
    5      166450811771   2011/1/1    否 2011-01-01
    6      166450811789   2011/1/1    是 2011-01-01
    7      166450811792   2011/1/1    是 2011-01-01
    
    data['格式化时间'] = data.时间.dt.strftime('%Y-%m-%d')
    Out[8]: 
             电话       注册时间 是否微信     时间       格式化时间
    0      166412894295   2011/1/1    否 2011-01-01  2011-01-01
    1      166416795207   2011/1/1    否 2011-01-01  2011-01-01
    2      166423353436   2011/1/1    是 2011-01-01  2011-01-01
    3      166424978309   2011/1/1    是 2011-01-01  2011-01-01
    4      166450811715   2011/1/1    否 2011-01-01  2011-01-01
    5      166450811771   2011/1/1    否 2011-01-01  2011-01-01
    6      166450811789   2011/1/1    是 2011-01-01  2011-01-01
    7      166450811792   2011/1/1    是 2011-01-01  2011-01-01
    
    data['时间.年'] = data['时间'].dt.year
    data['时间.月'] = data['时间'].dt.month
    data['时间.周'] = data['时间'].dt.weekday
    data['时间.日'] = data['时间'].dt.day
    data['时间.时'] = data['时间'].dt.hour
    data['时间.分'] = data['时间'].dt.minute
    data['时间.秒'] = data['时间'].dt.second
    
    屏幕快照 2018-07-04 06.06.38.png

    2.时间抽取

    指根据一定条件,对时间格式的数据进行抽取
    根据索引抽取。

    2.1 根据索引抽取

    #抽取一段连续时间
    DataFrame.ix[start:end]
    
    #抽取时间点,多个时间点整理成时间点数组
    DataFrame.ix[dates]
    
    # -*- coding: utf-8 -*-
    import pandas
    
    data = pandas.read_csv(
        '/users/bakufu/desktop/4.17/data.csv',
        encoding='utf-8'
    )
    
    屏幕快照 2018-07-05 05.54.35.png
    #把时间列设置为索引列
    dateparse = lambda dates: pandas.datetime.strptime(
        dates, '%Y%m%d'
    )
    #lambda表达式,会传入每一列数据
    
    data = pandas.read_csv(
        '/users/bakufu/desktop/4.17/data.csv',
        encoding='utf-8',
        
        #指定哪些列是时间格式的列
        parse_dates=['date'],
        
        #指定使用哪个方法处理时间格式的数据,上面已经定义
        date_parser=dateparse,  
    
        #指定哪一列作为数据框的索引  
        index_col='date'  
    )
    
    屏幕快照 2018-07-05 06.00.46.png
    #根据索引进行抽取
    import datetime
    
    #生成两个时间点数组
    dt1 = datetime.date(year=2016, month=2, day=1);
    Out[4]: datetime.date(2016, 2, 1)
    
    dt2 = datetime.date(year=2016, month=2, day=5);
    Out[5]: datetime.date(2016, 2, 5)
    
    #获取两个时间点内包含的数据
    data.ix[dt1: dt2]
    Out[6]: 
                value
    date             
    2016-02-01  11261
    2016-02-02   8713
    2016-02-03   7299
    2016-02-04  10424
    2016-02-05  10795
    
    #获取两个时间点对应的数据
    data.ix[[dt1,dt2]]
    
    Out[7]: 
                value
    date             
    2016-02-01  11261
    2016-02-05  10795
    

    2.2 根据时间列抽取

    DataFrame[condition]
    
    # -*- coding: utf-8 -*-
    import pandas
    data = pandas.read_csv(
        '/users/bakufu/desktop/4.17/data.csv',
        encoding='utf-8',
        parse_dates=['date'],
        date_parser=dateparse
    )
    
    屏幕快照 2018-07-05 06.08.01.png
    #时间格式数据比较运算
    data[(data.date>=dt1) & (data.date<=dt2)]
    Out[12]: 
             date  value
    31 2016-02-01  11261
    32 2016-02-02   8713
    33 2016-02-03   7299
    34 2016-02-04  10424
    35 2016-02-05  10795
    

    相关文章

      网友评论

          本文标题:07.时间处理&抽取

          本文链接:https://www.haomeiwen.com/subject/lepsuftx.html