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')
网友评论