datetime 索引_时间序列:字符串与datetime相互转换

v2-1d3747cfc5f72ac4bc22aa28c027ea84_1440w.jpg?source=172ae18b

利用str或strftime方法(传入一个格式化字符串),datetime对象和pandas的Timestamp对象可以被格式化为字符串:

In [111]: stamp=datetime(2011,1,3)

将datetime对象转换为字符串

In [112]: str(stamp)

Out[112]: '2011-01-03 00:00:00'

使用strftime定义展示格式

In [113]: stamp.strftime('%Y-%m-%d')

Out[113]: '2011-01-03'

datetime.strptime:将字符串转换为格式化编码

In [114]: value='2011-01-03'

In [115]: datetime.strptime(value,'%Y-%m-%d')

Out[115]: datetime.datetime(2011, 1, 3, 0, 0)

In [117]: datestrs=['7/6/2011','8/6/2011']

In [118]: [datetime.strptime(x,'%m/%d/%Y') for x in datestrs]

Out[118]: [datetime.datetime(2011, 7, 6, 0, 0), datetime.datetime(2011, 8, 6, 0, 0)]

Datetime.strptime是通过已知格式进行日期解析的最佳方式。但是每次都要编写格式定义是很麻烦的事情,尤其是对于一些常见的日期格式。在这种情况下,可以用dateutil这个第三方包中的parser.parse方法

In [119]: from dateutil.parser import parse

In [120]: parse('2011-01-03')

Out[120]: datetime.datetime(2011, 1, 3, 0, 0)

dateutil可以解析几乎所有人类能够理解的日期表示形式(中文不行):

In [121]: parse('Jan 31,1997 10:45 PM')

Out[121]: datetime.datetime(2018, 1, 31, 22, 45)

dayfirst=True:解决日在月前面的问题

在国际通用的格式中,日通常出现在月的前面,传入dayfirst=True即可解决 问题:

In [122]: parse('6/12/2011',dayfirst=True)

Out[122]: datetime.datetime(2011, 12, 6, 0, 0)

Pandas通常是用于处理成组日期的,不管这些日期是DataFrame的轴索引还是列。To_datetime方法可以解析多种不同的日期表示形式。对标准日期格式(如ISO8601)的解析非常快。

In [123]: datestrs

Out[123]: ['7/6/2011', '8/6/2011']

In [124]: pd.to_datetime(datestrs)

Out[124]: DatetimeIndex(['2011-07-06', '2011-08-06'], dtype='datetime64[ns]', freq=None)

In [125]: idx=pd.to_datetime(datestrs+[None])

In [126]: idx

Out[126]: DatetimeIndex(['2011-07-06', '2011-08-06', 'NaT'], dtype='datetime64[ns]', freq=None)

In [127]: idx[2]

Out[127]: NaT

In [128]: pd.isnull(idx)

Out[128]: array([False, False, True], dtype=bool)

NaT(Not a Time)是pandas中时间戳数据的NA值。

「亲,如果笔记对您有帮助,收藏的同时,记得给点个赞、加个关注哦!感谢!」

「文中代码均亲测过,若有错误之处,欢迎批评指正,一起学习,一起成长!」

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值