Series第十一讲 Datetime 方法

2020-09-25  本文已影响0人  butters001

Series第十一讲 Datetime 方法

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

Datetime 方法

详细介绍

首先导入所需依赖包

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(以特定频率)。

常用参数介绍:
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标准库相同的字符串格式。

常用参数介绍:
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')
上一篇下一篇

猜你喜欢

热点阅读