将字符串转换为未解析'Feb'月份



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

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]

这似乎对所有月份都有效,除了Feb:

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',...

我难住了。

您可以指定如下格式:

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')]

查看日期时间的所有格式选项。

to_datetime()有一个format参数,它应该强制它以一种特定的方式解释它。我打赌2月失败的原因是因为今天是29号,这对2月来说(通常)是不好的。(注意其他日期都是29号。我猜它出于某种原因将未指定的日期替换为当前日期。)

使用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)

这里简单提一下

相关内容

  • 没有找到相关文章