在Python中将日期字符串列表重新格式化为日、月、年
我想更改列表中字符串的格式。它们是日期,但已转换为字符串 我到处寻找这个解决方案,但似乎只有一个元素的答案 首先我做一个系列在Python中将日期字符串列表重新格式化为日、月、年,python,list,date,datetime,format,Python,List,Date,Datetime,Format,我想更改列表中字符串的格式。它们是日期,但已转换为字符串 我到处寻找这个解决方案,但似乎只有一个元素的答案 首先我做一个系列 Date_List = df.loc['receiveddate'] print Date_List Element1 2015-06-26 Element2 2015-06-25 Element3
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\u列表=(datetime.datetime.strtime(i,“%B%d-%Y”)作为日期列表中的i)
刚刚给了我value错误:时间数据“2015-06-26”与格式“%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-07-01 00:00:00']
有人知道如何重新设置列表格式吗?或者早些时候,重新格式化该系列?谢谢。你就快到了。
datetime.datetime.strtime
将字符串转换为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)
您甚至不需要在此处使用
datetime
。只需将这些对象映射到一个函数,该函数将它们转换为字符串并在-
上拆分它们,然后使用str.format()
:
另外,从代码片段来看,您希望的是第一个月,而不是第一天。您可以从字符串的角度来解决它
New_Date_List = [d[8:10]+"-"+d[5:7]+"-"+d[:4] for d in Date_List]
把你的理解改为
import datetime
Date_List = [datetime.datetime.strptime(str(i), '%Y-%m-%d').strftime('%m-%d-%Y') for i in Date_List]
正则表达式提供了一个非常简单的解决方案:
>>> import re
>>> re.sub(r'(\d{4})-(\d{2})-(\d{2})', r'\2-\3-\1', '2015-06-25')
'06-25-2015'
虽然它并不漂亮,但应该可以生成一个月-日-年列表
New_Date_List = [[d][5:7] + '-' + Date_List[d][-2:] + '-' + Date_List[d][:4] for d in Date_List]
顺便说一下,
'2015-06-26'
与格式'%B%d-%Y'
不匹配,因为您缺少一个连字符:'%B-%d-%Y'
@TigerhawkT3在中添加连字符不会更改错误。看起来您的%
变量也有错误%B
是一个完整的月份名称,如“一月”
。像其他地方一样尝试“%Y-%m-%d”
。啊!我忘了补充一点,我也尝试过使用strftime。无论我在哪里,还是使用您的方法,都会出现这样一个让我困惑的错误:TypeError:不是JSON Serializable错误必须来自代码的另一部分。datetime与JSON无关实际上,我已经发现您的解决方案是创建一个generator对象。因此,为了使这个解决方案有效,您需要在第二行使用列表理解,因此Date_list=[datetime.datetime.strftime(i,“%m-%d-%Y”),对于Date_list中的i,您还可以说,“您甚至不需要将这些对象映射到一个函数,该函数将它们转换为字符串并在-,只需使用datetime,”…我可以,但是datetime
速度很慢,我们只需要切换以连字符分隔的字符串的顺序。这很有效!它是一个短字符串,所以计时不是问题(至少在这种情况下)
New_Date_List = [[d][5:7] + '-' + Date_List[d][-2:] + '-' + Date_List[d][:4] for d in Date_List]