重新设置仅在熊猫系列日期时间指数

我有熊猫系列枣myS重新设置仅在熊猫系列日期时间指数

import pandas as pd 

该指数是一组包含时间字符串的唯一

myS.index 

Out[28]:

Index([u'12:00 AM', u'12:14 AM', u'12:18 AM', u'12:25 AM', u'12:26 AM',

u'12:37 AM', u'12:41 AM', u'12:47 AM', u'12:55 AM', u'12:59 AM',

...

u'11:00 PM', u'11:02 PM', u'11:09 PM', u'11:18 PM', u'11:25 PM',

u'11:35 PM', u'11:42 PM', u'11:46 PM', u'11:50 PM', u'11:55 PM'],

dtype='object', name=u'Time (CET)', length=169)

我可以方便地将它转换为日期时间正确:

myS.index= pd.to_datetime(myS.index, format='%I:%M %p') 

但是,所有的日期将被设置为1900-01-01

'1900-01-01 23:50:00', '1900-01-01 23:55:00'], 

dtype='datetime64[ns]',

如果我有日期时间可用,我怎么能索引的所有日期复位到期望值而保留的时间?

回答:

我想你需要添加Date列,然后转换为datetime

myS.index = pd.to_datetime(myS['Date'].astype(str) + ' ' + myS.index) 

或者添加标量:

myS.index = pd.to_datetime('2015-01-05' + ' ' + myS.index) 

通过编辑点评:

myS.index = pd.to_datetime(str(mydatetime.date()) + ' ' + myS.index, 

format='%Y-%m-%d %I:%M %p',errors='coerce')

或者使用strftime

myS.index = pd.to_datetime(mydatetime.strftime('%Y-%m-%d') + ' ' + 

myS.index, format='%Y-%m-%d %I:%M %p',errors='coerce')

样品:

idx = pd.Index([u'12:00 AM', u'12:14 AM', u'12:18 AM', u'12:25 AM']) 

myS = pd.Series(range(4), index=idx)

print (myS)

12:00 AM 0

12:14 AM 1

12:18 AM 2

12:25 AM 3

dtype: int64

mydatetime = pd.datetime.now()

print (mydatetime)

2017-12-18 07:52:26.503385

myS.index = pd.to_datetime(str(mydatetime.date()) + ' ' +

myS.index, format='%Y-%m-%d %I:%M %p',errors='coerce')

print (myS)

2017-12-18 00:00:00 0

2017-12-18 00:14:00 1

2017-12-18 00:18:00 2

2017-12-18 00:25:00 3

dtype: int64

回答:

  1. 将所有时间字符串加上所需的日期字符串。
  2. 使用pd.to_datetime,并附加日期格式字符串。

例如,如果您有2017-03-05 12:18 AM,则您的格式字符串将变为%Y-%m-%d %I:%M %p

myS.index = pd.to_datetime('2017-03-05 ' + myS.index, '%Y-%m-%d %I:%M %p') 

(原来的默认格式非常适用于这种情况,所以format='%Y-%m-%d %I:%M %p'是可选的。)

以上是 重新设置仅在熊猫系列日期时间指数 的全部内容, 来源链接: utcz.com/qa/261254.html

回到顶部