我有一大堆数据,有两个列表包含日期和时间,如下所示:
日期:年 - 月 - 日
次:小时:分钟:秒
所以我把它们拿到appart并将每个放入一个单独的列表中:
year,month,day = [i.split("-")[0] for i in date], [i.split("-")[1] for i in date], [i.split("-")[2] for i in date]
hour,minute,second = [i.split(":")[0] for i in time], [i.split(":")[1] for i in time], [i.split(":")[2] for i in time]
现在我因为每个都是长度相同的长列表,我想将它们转换为一个包含datetime
个对象的列表。所以我使用了另一个列表理解:
datetime_column = [datetime.datetime(int(y),int(m),int(d),int(h),int(m),int(s)) for y,m,d,h,m,s in year,month,day,hour,minute,second]
这给了我以下错误:
ValueError: too many values to unpack
我知道这是因为它试图在每个列表中迭代y,m,d,h,m和s而不是将它们配对,例如y与年份,m与月份等等。所以这是我的问题:
如何使用6个变量的列表理解,每个变量分别通过6个独立列表中的1个?如果不可能,那么做同等效的方法是什么?
答案 0 :(得分:6)
你为自己制造的东西太复杂了。压缩date
和time
列表,然后使用datetime.datetime.strptime()
:
datetime_column = [datetime.datetime.strptime('{} {}'.format(d, t),
'%Y-%m-%d %H:%M:%S')
for d, t in zip(date, time)]
zip()
将每个date
字符串与每个time
字符串配对,然后我们使用每对创建一个完整的时间戳字符串,由strptime()
方法解析。
答案 1 :(得分:0)
虽然有更好的方法来完成你想要做的事情,但这里是你实际问的问题的答案:
datetime_column = [
datetime.datetime(
int(dt[0]),int(dt[1]),int(dt[2]),int(dt[3]),int(dt[4]),int(dt[5]))
for dt in zip(year,month,day,hour,minute,second)]
或更简洁:
datetime_column = [
datetime.datetime(*dt) for dt in
(map(int, v) for v in zip(year,month,day,hour,minute,second))]