我有一个包含日期列的csv文件。日期格式为“ 1stNov”,“ 22ndNov”等。如何在熊猫中以编程方式将其转换为日期时间?
答案 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']]
或删除st
,nd
字符串并转换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