【问题标题】:Pandas: How to set hour of a datetime from another column?Pandas:如何从另一列设置日期时间的小时?
【发布时间】:2021-04-09 09:05:06
【问题描述】:

我有一个dataframe,包括一个datetime 日期列和一个小时列。

像这样:

min hour    date    
0   0   2020-12-01  
1   5   2020-12-02  
2   6   2020-12-01

我需要一个包含日期和小时的datetime 列。

像这样:

min hour    date        datetime
0   0   2020-12-01  2020-12-01 00:00:00
0   5   2020-12-02  2020-12-02 05:00:00 
0   6   2020-12-01  2020-12-01 06:00:00

我该怎么做?

【问题讨论】:

    标签: python pandas dataframe datetime


    【解决方案1】:

    使用pd.to_datetimepd.to_timedelta

    In [393]: df['date'] = pd.to_datetime(df['date'])
    
    In [396]: df['datetime'] = df['date'] +  pd.to_timedelta(df['hour'], unit='h')
        
    In [405]: df
    Out[405]: 
       min  hour       date            datetime
    0    0     0 2020-12-01 2020-12-01 00:00:00
    1    1     5 2020-12-02 2020-12-02 05:00:00
    2    2     6 2020-12-01 2020-12-01 06:00:00
    

    【讨论】:

    • 请注意,当您使用时区时,您可能会在夏令时转换时获得意外结果。例如pd.Timestamp('2033-03-27 0:00', tz='CET') + pd.to_timedelta(23, unit='h')给出Timestamp('2033-03-28 00:00:00+0200', tz='CET')而不是你可能期望的Timestamp(2022-03-27 23:00:00+0100)pd.Timestamp('2022-03-27 0:00', tz='CET') + pd.to_timedelta(2, unit='h')导致Timestamp('2022-03-27 03:00:00+0200', tz='CET')
    【解决方案2】:

    您也可以尝试使用applynp.timedelta64

    df['datetime'] = df['date'] + df['hour'].apply(lambda x: np.timedelta64(x, 'h'))
    print(df)
    

    输出:

       min  hour       date            datetime
    0    0     0 2020-12-01 2020-12-01 00:00:00
    1    1     5 2020-12-02 2020-12-02 05:00:00
    2    2     6 2020-12-01 2020-12-01 06:00:00
    

    【讨论】:

      【解决方案3】:

      在第一个问题中,不清楚列的数据类型,所以我认为它们是 在 date(不是 pandas)中,他想要 datetime 版本。

      如果是这种情况,解决方案与前面类似,但使用不同的构造函数。

      from datetime import datetime
      df['datetime'] = df.apply(lambda x: datetime(x.date.year, x.date.month, x.date.day, int(x['hour']), int(x['min'])), axis=1)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-09-27
        • 1970-01-01
        • 2020-10-09
        • 2018-09-16
        • 2019-04-03
        • 2020-08-21
        相关资源
        最近更新 更多