python 将日期列表转换为字符串形式的日期列表
python convert a list of dates as strings to a list of dates
我有一个以字符串形式导入的日期列表。我尝试了很多不同的方法将其转换为日期列表。不管我怎么做我都会收到错误消息。
#import valid dates from map file as list
valdts = dfmap.loc[row, 'valdata'].split(', ')
print(valdts)
>>
['1/1/1990', '6/6/1990', '7/4/1776']
#convert strings to dates
attempt1:
valdts = [d.strftime('%Y-%m-%d') for d in valdts]
>>
AttributeError: 'str' object has no attribute 'strftime'
attempt2:
a = [date_obj.strftime('%Y%m%d') for date_obj in valdts]
>>
AttributeError: 'str' object has no attribute 'strftime'
attempt3:
a = datetime.strptime(valdts, '%d %b %Y')
>>
TypeError: strptime() argument 1 must be str, not list
attempt4:
a = valdts.sort(key = lambda dt: datetime.strptime(dt, '%d %m %Y'))
>>
ValueError: time data '1/1/1990' does not match format '%d %m %Y'
attempt5:
for dt in valdts:
dt = dt.replace('/',',')
print(dt)
c = datetime.strptime('.'.join(str(i) for i in dt).zfill(8), "%Y.%m.%d")
>>
'1,1,1990'
ValueError: time data '1.,.1.,.1.9.9.0' does not match format '%Y.%m.%d'
attempt6:
for dt in valdts:
dt = dt.replace('/',',')
datetime.strptime(dt, '%d %m %Y')
>>
ValueError: time data '1,1,1990' does not match format '%d %m %Y'
我很沮丧。上面的不同方法是基于对其他人发布的相似但不完全相同的问题的回答。与我最相似的问题已被否决。我想做一些愚蠢的事情吗?真的很感激这里的一些帮助。谢谢
注意:datetime.datetime 给我一个错误。 AttributeError: 类型对象 'datetime.datetime' 没有属性 'datetime' 但我的代码的其他部分只有 datetime 有效。
这是我最终想出的解决方法。但欢迎有更好的方法,不需要拆分每个日期。
valdts = dfmap.loc[row, 'valdata'].split(', ')
print(valdts)
>>
['1/1/1990', '6/6/1990', '7/4/1776']
for dt in valdts:
ldt = dt.split('/')
valdt = datetime(int(ldt[2]), int(ldt[1]), int(ldt[0]))
ldates.append(valdt)
print(ldt)
>>
注意 1:由于我导入日期时间的方式,datetime.datetime 对我不起作用。查看出色的解释 here。
note2:将单个数字转换为 int 至关重要。没有别的对我有用。感谢@waitingkuo 在上面相同的 link 中提供的解决方案。
我有一个以字符串形式导入的日期列表。我尝试了很多不同的方法将其转换为日期列表。不管我怎么做我都会收到错误消息。
#import valid dates from map file as list
valdts = dfmap.loc[row, 'valdata'].split(', ')
print(valdts)
>>
['1/1/1990', '6/6/1990', '7/4/1776']
#convert strings to dates
attempt1:
valdts = [d.strftime('%Y-%m-%d') for d in valdts]
>>
AttributeError: 'str' object has no attribute 'strftime'
attempt2:
a = [date_obj.strftime('%Y%m%d') for date_obj in valdts]
>>
AttributeError: 'str' object has no attribute 'strftime'
attempt3:
a = datetime.strptime(valdts, '%d %b %Y')
>>
TypeError: strptime() argument 1 must be str, not list
attempt4:
a = valdts.sort(key = lambda dt: datetime.strptime(dt, '%d %m %Y'))
>>
ValueError: time data '1/1/1990' does not match format '%d %m %Y'
attempt5:
for dt in valdts:
dt = dt.replace('/',',')
print(dt)
c = datetime.strptime('.'.join(str(i) for i in dt).zfill(8), "%Y.%m.%d")
>>
'1,1,1990'
ValueError: time data '1.,.1.,.1.9.9.0' does not match format '%Y.%m.%d'
attempt6:
for dt in valdts:
dt = dt.replace('/',',')
datetime.strptime(dt, '%d %m %Y')
>>
ValueError: time data '1,1,1990' does not match format '%d %m %Y'
我很沮丧。上面的不同方法是基于对其他人发布的相似但不完全相同的问题的回答。与我最相似的问题已被否决。我想做一些愚蠢的事情吗?真的很感激这里的一些帮助。谢谢
注意:datetime.datetime 给我一个错误。 AttributeError: 类型对象 'datetime.datetime' 没有属性 'datetime' 但我的代码的其他部分只有 datetime 有效。
这是我最终想出的解决方法。但欢迎有更好的方法,不需要拆分每个日期。
valdts = dfmap.loc[row, 'valdata'].split(', ')
print(valdts)
>>
['1/1/1990', '6/6/1990', '7/4/1776']
for dt in valdts:
ldt = dt.split('/')
valdt = datetime(int(ldt[2]), int(ldt[1]), int(ldt[0]))
ldates.append(valdt)
print(ldt)
>>
注意 1:由于我导入日期时间的方式,datetime.datetime 对我不起作用。查看出色的解释 here。
note2:将单个数字转换为 int 至关重要。没有别的对我有用。感谢@waitingkuo 在上面相同的 link 中提供的解决方案。