【问题标题】:Combine multiple arrays to datetime将多个数组组合到日期时间
【发布时间】:2019-07-17 12:41:33
【问题描述】:

我有一个包含如下列表的 excel 文件:

month   day     time
1        1      00:00
1        2      02:00
1        3      08:00
2        1      19:00
2        2      04:00

我需要它们是这样的 python 日期时间对象 (1,1,00:00),(1,2,02:00)...

谁能帮忙?

从评论中复制:我已经这样做了:

Dates={'month': [val[0] for val in datain], 
       'day': [val[1] for val in datain], 
       'time': [val[2] for val in datain]} 
df=DataFrame(Dates, columns= ['day', 'month','time']) 

它给出了这个:

day month time 
0 1 10 0.000000 
1 1 10 0.041667 
2 1 10 0.083333 
3 1 10 0.125000 
4 1 10 0.166667 
5 1 10 0.208333 
6 1 10 0.250000 
7 1 10 0.291667 
8 1 10 0.333333 

我现在需要将它们合并在一起,并把握好时机。

【问题讨论】:

标签: python excel pandas datetime dataframe


【解决方案1】:

使用to_datetime,您可以非常轻松地将任何列转换为 pandas 日期时间。

df['fulldate'] = df['month'].astype(str)+'/'+df['day'].astype(str)+'/'+df['time']

# Careful, there's not year in the data frame you gave
df['fulldate'] = pd.to_datetime(df['fulldate'], format='%m/%d/%H:%M')

如果你想要一个普通的datetimeobject,你可以使用

df['fulldate'].apply(lambda x: x.to_pydatetime())

# OR

df['fulldate'].dt.to_pydatetime()

如果您确实关心普通的 datetime 对象,这里有一些运行计时器(10k 行):

pd.to_datetime(df['fulldate'], format='%m/%d/%H:%M').dt.to_pydatetime()
#220 ms ± 6.51 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

df['fulldate'].apply(lambda date: datetime.strptime(date, '%m/%d/%H:%M'))
#879 ms ± 289 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

【讨论】:

    【解决方案2】:

    试试这个

    from datetime import datetime
    import csv
    output = []
    with open('./test_time.csv') as f:
        rows = csv.DictReader(f)
        for r in rows:
            t1, t2 = r['time'].split(':')
            m = int(r['month'])
            d = int(r['day'])
            y = datetime.today().year
            output.append(datetime(y, m, d, int(t1), int(t2)))
    print(output)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-09
      • 2021-08-16
      • 2020-05-10
      • 1970-01-01
      相关资源
      最近更新 更多