熊猫至今的字符串到日期时间格式

时间:2018-12-03 11:30:02

标签: python python-3.x pandas csv datetime

我有一个包含日期列的csv文件。日期格式为“ 1stNov”,“ 22ndNov”等。如何在熊猫中以编程方式将其转换为日期时间?

2 个答案:

答案 0 :(得分:3)

这不是熊猫特定的问题,而是字符串/模式匹配中的问题。使用Python's strftime directives。另请注意,您必须提供年份:datetime对象内部必须保存一年。因此,使用常规Python:

from datetime import datetime

L = ["1stNov", "22ndNov"]
res = [datetime.strptime(i[:-5] + i[-3:] + '2018', '%d%b%Y') for i in L]

[datetime.datetime(2018, 11, 1, 0, 0),
 datetime.datetime(2018, 11, 22, 0, 0)]

或与熊猫一起使用

s = pd.Series(L)
res = pd.to_datetime(s.str[:-5] + s.str[-3:] + '2018', format='%d%b%Y')

0   2018-11-01
1   2018-11-22
dtype: datetime64[ns]

答案 1 :(得分:0)

parser使用列表理解:

df = pd.DataFrame({'dates':["1stNov", "22ndNov"]})

from dateutil import parser
df['dates'] = [parser.parse(f'{x[:-3]} {x[-3:]} 2018') for x in df['dates']]

或删除stnd字符串并转换to_datetime

#python 3.6+ solution with f-strings
dates = [(f'{x[:-5]}{x[-3:]}2018') for x in df['dates']]
#python bellow 3.6
#dates = ['{}{}2018'.format(x[:-5], x[-3:]) for x in df['dates']]
df['dates'] = pd.to_datetime(dates, format='%d%b%Y')

print (df)
       dates
0 2018-11-01
1 2018-11-22