将字符串转换为日期时间 - ' 2月'一个月没有解析

时间:2015-05-29 22:24:38

标签: python datetime pandas

我有一系列字符串对象,格式如下:

lcd['dates'] = ['Sep-2014', 'Feb-2014', 'Apr-2014', 'Oct-2013', 'Oct-2014',...]

我正在尝试将它们转换为日期时间格式(四舍五入到天),如下所示:

lcd['new dates'] = [pd.to_datetime(j, unit = "D",exact=False) for j in lcd.dates]

这似乎适用于2月份的所有月份:

In: lcd['new_dates'].unique():

Out:Timestamp('2013-05-29 00:00:00'), Timestamp('2015-03-29 00:00:00'),
   Timestamp('2012-06-29 00:00:00'), 'Feb-2015',
   Timestamp('2012-12-29 00:00:00'), Timestamp('2014-07-29 00:00:00'),
   Timestamp('2014-09-29 00:00:00'), 'Feb-2014',...

我很难过。

3 个答案:

答案 0 :(得分:3)

您可以指定格式:

import pandas as pd

lcd = ['Sep-2014', 'Feb-2014', 'Feb-2015', 'Apr-2014', 'Oct-2013', 'Oct-2014',]
lcd = [pd.to_datetime(j, unit = "D", format='%b-%Y') for j in lcd]
print lcd

打印:

[Timestamp('2014-09-01 00:00:00'), Timestamp('2014-02-01 00:00:00'), Timestamp('2015-02-01 00:00:00'), Timestamp('2014-04-01 00:00:00'), Timestamp('2013-10-01 00:00:00'), Timestamp('2014-10-01 00:00:00')]

另请参阅datetime的所有格式选项。

答案 1 :(得分:2)

to_datetime()有一个format参数,它应该强制它以特定的方式解释它。我敢打赌,二月失败的原因是因为今天是29日,这对二月份来说(通常)不合适。 (注意其他日期中有29个。我猜它因为某些原因而在当天取代了未指定的日期。)

答案 2 :(得分:1)

这样的数据可以很好地使用Period。如果您愿意,您可以随时转换为时间戳(并控制它的转换方式,例如,第一天或最后一天)。

In [1]: PeriodIndex([ Period(p,'M') for p in ['Sep-2014', 'Feb-2014', 'Apr-2014', 'Oct-2013', 'Oct-2014'] ])
Out[1]: PeriodIndex(['2014-09', '2014-02', '2014-04', '2013-10', '2014-10'], dtype='int64', freq='M')

In [2]: PeriodIndex([ Period(p,'M') for p in ['Sep-2014', 'Feb-2014', 'Apr-2014', 'Oct-2013', 'Oct-2014'] ]).to_timestamp()
Out[2]: DatetimeIndex(['2014-09-01', '2014-02-01', '2014-04-01', '2013-10-01', '2014-10-01'], dtype='datetime64[ns]', freq=None, tz=None)

简要提及here