在Python中将日期字符串列表重新格式化为日,月,年

时间:2015-08-27 20:33:03

标签: python list date datetime format

我想更改列表中字符串的格式。它们是日期,但已被转换为字符串。

我已经全神贯注地寻找这个解决方案,但似乎只有单个元素的答案。

首先我制作一个系列

Date_List = df.loc['receiveddate']
print Date_List

Element1                               2015-06-26
Element2                               2015-06-25
Element3                               2015-06-26
Element4                               2015-06-25
Element5                               2015-06-25
Element6                               2015-07-01

然后我把它转换成一个列表。

Date_List = [str(i) for i in Date_List]

给了我

['2015-06-26', '2015-06-25', '2015-06-26', '2015-06-25', '2015-06-25', '2015-07-01']

相反,我想要一个日,月,年的字符串列表

['06-26-2015', '06-25-2015...etc.]

我发现最常见的建议是使用strftime。试着Date_List = (datetime.datetime.strptime(i, "%B %d-%Y") for i in Date_List)刚刚给了我ValueError: time data '2015-06-26' does not match format '%B %d-%Y'

所以我试过

Date_List = (datetime.datetime.strptime(i, "%Y-%m-%d") for i in Date_List)

这返回了['2015-06-26 00:00:00', '2015-06-25 00:00:00', '2015-06-26 00:00:00', '2015-06-25 00:00:00', '2015-06-25 00:00:00', '2015-07-01 00:00:00']

有人知道如何重新格式化列表吗?或者可能更早,重新格式化系列?谢谢。

5 个答案:

答案 0 :(得分:2)

你几乎就在那里。 datetime.datetime.strptime将字符串转换为datetime对象。您需要datetime.datetime.strftime将其转换回字符串:

Date_List = (datetime.datetime.strptime(i, "%Y-%m-%d") for i in Date_List)
Date_List = (datetime.datetime.strftime(i, "%m-%d-%Y") for i in Date_List)

答案 1 :(得分:1)

你甚至不需要在这里使用datetime。只需将这些对象映射到一个函数,该函数将它们转换为字符串并将它们拆分为-,然后使用str.format()

Date_List = ['{}-{}-{}'.format(m,d,y) for y, m, d in map(lambda x: str(x).split('-'), Date_List)]

此外,从您的代码段开始,您似乎想要的是月份,而不是当天。

答案 2 :(得分:0)

您可以通过字符串的观点来解决它

New_Date_List = [d[8:10]+"-"+d[5:7]+"-"+d[:4] for d in Date_List]

答案 3 :(得分:0)

将您的理解力改为

import datetime
Date_List = [datetime.datetime.strptime(str(i), '%Y-%m-%d').strftime('%m-%d-%Y') for i in Date_List]

答案 4 :(得分:0)

虽然它并不漂亮,但它应该可以生成一个月 - 日的列表。

New_Date_List = [[d][5:7] + '-' + Date_List[d][-2:] + '-' + Date_List[d][:4] for d in Date_List]