美文网首页
Series第十一讲 Datetime 方法

Series第十一讲 Datetime 方法

作者: butters001 | 来源:发表于2020-09-25 14:59 被阅读0次

    Series第十一讲 Datetime 方法

    本节课将讲解Pandas-Series中关于Datetime的方法。

    Datetime 方法

    • Series.dt.to_period()
    • Series.dt.to_pydatetime()
    • Series.dt.tz_localize()
    • Series.dt.tz_convert()
    • Series.dt.normalize()
    • Series.dt.strftime()
    • Series.dt.round()
    • Series.dt.floor()
    • Series.dt.ceil()
    • Series.dt.month_name()
    • Series.dt.day_name()

    详细介绍

    首先导入所需依赖包

    In [1]: import numpy as np                                                               
    In [2]: import pandas as pd
    

    1. Series.dt.to_period()

    Series.dt.to_period(*args, **kwargs)
    

    将DatetimeArray/Index转换为PeriodArray/Index(以特定频率)。

    常用参数介绍:
    • freq:str or Offset, optional 【频率/周期,默认会自动推断】
    In [7]: index=pd.to_datetime(["2000-03-31 00:00:00", "2000-05-31 00:00:00", "2000-08-31 00:00:00"])                                                     
    In [8]: index                                                                   
    Out[8]: DatetimeIndex(['2000-03-31', '2000-05-31', '2000-08-31'], dtype='datetime64[ns]', freq=None)
    
    # 可以观察到 dtype改变了
    In [9]: index.to_period("M")                                                    
    Out[9]: PeriodIndex(['2000-03', '2000-05', '2000-08'], dtype='period[M]', freq='M')   
    
    # 不指定参数 则自动推断 
    # 注意⚠️:idx可以自动推断因为idx的freq属性有值,而index无法自动推断,因为index的freq属性为None
    In [10]: idx = pd.date_range("2017-01-01", periods=2)               
    In [11]: idx                                                                    
    Out[11]: DatetimeIndex(['2017-01-01', '2017-01-02'], dtype='datetime64[ns]', freq='D')
    
    In [12]: idx.to_period()                                                        
    Out[12]: PeriodIndex(['2017-01-01', '2017-01-02'], dtype='period[D]', freq='D')
    

    2. Series.dt.to_pydatetime()

    Series.dt.to_pydatetime()
    

    返回一个array,里面元素为Python-datetime对象。Python的日期时间使用微秒分辨率,比pandas(纳秒)低,值将被截断。

    In [17]: s = pd.Series(pd.date_range('20180310', periods=2, freq='ns'))         
    In [18]: s                                                                      
    Out[18]: 
    0   2018-03-10 00:00:00.000000000
    1   2018-03-10 00:00:00.000000001
    dtype: datetime64[ns]
    
    In [19]: s.dt.to_pydatetime()                                                   
    Out[19]: 
    array([datetime.datetime(2018, 3, 10, 0, 0),
           datetime.datetime(2018, 3, 10, 0, 0)], dtype=object)
    

    3. Series.dt.tz_localize()

    Series.dt.tz_localize(*args, **kwargs)
    

    时区本地化,此方法在 第九讲(时间相关的Series) 中有介绍。

    4. Series.dt.tz_convert()

    Series.dt.tz_convert(*args, **kwargs)
    

    时区转换,此方法在 第九讲(时间相关的Series) 中有介绍。

    5. Series.dt.normalize()

    Series.dt.normalize(*args, **kwargs)
    

    日期时间的时间部分将转换为午夜,即00:00:00。这在时间无关紧要的情况下很有用。长度不变。时区不受影响。。

    In [20]: idx = pd.date_range(start='2014-08-01 10:00', freq='H', periods=3, tz='Asia/Calcutta')                                         
    In [21]: idx                                                                    
    Out[21]: 
    DatetimeIndex(['2014-08-01 10:00:00+05:30', '2014-08-01 11:00:00+05:30',
                   '2014-08-01 12:00:00+05:30'],
                  dtype='datetime64[ns, Asia/Calcutta]', freq='H')
    
    In [22]: idx.normalize()                                                        
    Out[22]: 
    DatetimeIndex(['2014-08-01 00:00:00+05:30', '2014-08-01 00:00:00+05:30',
                   '2014-08-01 00:00:00+05:30'],
                  dtype='datetime64[ns, Asia/Calcutta]', freq=None)
    

    6. Series.dt.strftime()

    Series.dt.strftime(*args, **kwargs)
    

    返回由date_format指定的格式化字符串的索引,该索引支持与python标准库相同的字符串格式。

    常用参数介绍:
    • date_format:str 【格式化的时间字符串,比如 “%Y-%m-%d”】
    In [23]: rng = pd.date_range(pd.Timestamp("2018-03-10 09:00"), periods=3, freq='s')                               
    
    In [24]: rng                                                                    
    Out[24]: 
    DatetimeIndex(['2018-03-10 09:00:00', '2018-03-10 09:00:01',
                   '2018-03-10 09:00:02'],
                  dtype='datetime64[ns]', freq='S')
    
    In [25]: rng.strftime('%B %d, %Y, %r')                                          
    Out[25]: 
    Index(['March 10, 2018, 09:00:00 AM', 'March 10, 2018, 09:00:01 AM',
           'March 10, 2018, 09:00:02 AM'],
          dtype='object')
    

    7. Series.dt.round()

    Series.dt.round(*args, **kwargs)
    

    对数据执行舍入运算到指定的时间频率。

    # DatetimeIndex
    In [26]: rng = pd.date_range('1/1/2018 11:59:00', periods=3, freq='min')        
    In [27]: rng                                                                    
    Out[27]: 
    DatetimeIndex(['2018-01-01 11:59:00', '2018-01-01 12:00:00',
                   '2018-01-01 12:01:00'],
                  dtype='datetime64[ns]', freq='T')
    
    In [28]: rng.round('H')                                                         
    Out[28]: 
    DatetimeIndex(['2018-01-01 12:00:00', '2018-01-01 12:00:00',
                   '2018-01-01 12:00:00'],
                  dtype='datetime64[ns]', freq=None)
    
    # Series
    In [29]: pd.Series(rng).dt.round("H")                                           
    Out[29]: 
    0   2018-01-01 12:00:00
    1   2018-01-01 12:00:00
    2   2018-01-01 12:00:00
    dtype: datetime64[ns]
    

    8. Series.dt.floor()

    Series.dt.floor(*args, **kwargs)
    

    同round类似,只不过这个是向下取值。

    In [30]: rng = pd.date_range('1/1/2018 11:59:00', periods=3, freq='min')        
    In [31]: rng                                                                    
    Out[31]: 
    DatetimeIndex(['2018-01-01 11:59:00', '2018-01-01 12:00:00',
                   '2018-01-01 12:01:00'],
                  dtype='datetime64[ns]', freq='T')
    
    In [32]: rng.floor('H')                                                         
    Out[32]: 
    DatetimeIndex(['2018-01-01 11:00:00', '2018-01-01 12:00:00',
                   '2018-01-01 12:00:00'],
                  dtype='datetime64[ns]', freq=None)
    

    9. Series.dt.ceil()

    Series.dt.ceil(*args, **kwargs)
    

    同round类似,只不过这个是向上取值。

    In [33]: rng.ceil('H')                                                          
    Out[33]: 
    DatetimeIndex(['2018-01-01 12:00:00', '2018-01-01 12:00:00',
                   '2018-01-01 13:00:00'],
                  dtype='datetime64[ns]', freq=None)
    

    10. Series.dt.month_name()

    Series.dt.month_name(*args, **kwargs)
    

    返回具有指定语言环境的DateTimeIndex的月份名称。

    In [35]: rng.month_name()                                                       
    Out[35]: Index(['January', 'January', 'January'], dtype='object')
    

    11. Series.dt.day_name()

    Series.dt.day_name(*args, **kwargs)
    

    返回具有指定语言环境的DateTimeIndex的日期名称.

    In [36]: rng.day_name()                                                         
    Out[36]: Index(['Monday', 'Monday', 'Monday'], dtype='object')
    

    相关文章

      网友评论

          本文标题:Series第十一讲 Datetime 方法

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