我有一系列字符串对象,格式如下:
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',...
我很难过。
答案 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