0

私は大量のデータを持っており、次のように見える日付と時刻で構成される 2 つのリストがあります。

日付: 年月日

時間: 時:分:秒

だから私はそれらを分けて、それぞれを別々のリストに入れます:

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これらはそれぞれ同じ長さの長いリストであるため、それらをオブジェクトとして含む 1 つのリストに変換したいと考えています。したがって、これには別のリスト内包表記を使用しました。

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 と月などをペアにするのではなく、各リストで y、m、d、h、m、および s を反復しようとしているためです。だからここに私の質問があります:

それぞれが 6 つの個別のリストのうちの 1 つを通過する 6 つの変数で、リスト内包表記をどのように使用できますか? また、それが不可能な場合、同等のことを行う効率的な方法は何でしょうか?

4

2 に答える 2

6

あなたは物事を複雑にしすぎています。リストdatetimeリストを圧縮してから、次を使用します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()メソッドによって解析します。

于 2013-05-01T15:09:03.713 に答える
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))]
于 2013-05-01T15:23:19.057 に答える