【问题标题】:python add hourly data [1-24] to datetime data [duplicate]python将每小时数据[1-24]添加到日期时间数据[重复]
【发布时间】:2019-05-14 12:14:53
【问题描述】:

我在数据框中有以下数据结构:

Date          Hour
01/01/2016    1
01/01/2016    2
01/01/2016    3
01/01/2016    4
   ...        ...
01/01/2016    13
01/01/2016    14
   ...        ...

数据是 2 年的每小时数据。我设法将日期转换为日期时间格式,但小时被单独解析并位于单独的列中。如何将小时数转换为日期时间对象并将它们添加到日期中,以便获得正确的日期时间结构:

Date          Hour     DateTime
01/01/2016    1        01/01/2016 01:00:00
01/01/2016    2        01/01/2016 02:00:00
01/01/2016    3        01/01/2016 03:00:00
01/01/2016    4        01/01/2016 04:00:00
   ...        ...             ...
01/01/2016    13       01/01/2016 13:00:00
01/01/2016    14       01/01/2016 14:00:00
   ...        ...             ...

【问题讨论】:

  • 日期真的是日期时间格式吗?还是它们是字符串?
  • 它们最初的形式是 01.01.2016。我用这条线将它们转换为日期时间: df5['datum'] = pd.to_datetime(df5['datum'], dayfirst=True).dt.date
  • 根据数据是涵盖一天中第 n 个小时的整个时间段还是某个时间点,您必须考虑如何在您的DateTime 中表示这一点。作为欧洲人,我建议将 Hour 1 映射到 00:00:00,因为 2016-01-01T24:00:00 描述的时间点与 2016-01-02T00:00:00 相同(撇开闰秒等)
  • Hour 1 代表第 n 小时的整个时段,因为数据是指每小时发电量,以 kWh 为单位。

标签: python pandas datetime dataframe


【解决方案1】:

假设您的 2 列“日期”和“小时”是字符串。但如果没有,这应该照顾它。获取 2 个字符串列,将它们连接起来,然后转换为特定格式的日期时间:

if not is_string_dtype(df['Date']):
    df['Date'] = df['Date'].dt.strftime('%m/%d/%Y')
if not is_string_dtype(df['Hour']):
    df['Hour'] = df['Hour'].astype(str)

df['DateTime'] = df['Date'] + ' ' + df['Hour']
df['DateTime'] = pd.to_datetime(pd.Series(df['DateTime']), format="%m/%d/%Y %H")

【讨论】:

    【解决方案2】:

    给定

    >>> df                                                                                                                 
             Date  Hour
    0  01/01/2016     1
    1  01/01/2016     2
    2  01/01/2016     3
    3  01/01/2016     4
    

    我会发布

    >>> df['Date'] = pd.to_datetime(df['Date']) # pick dayfirst=True or False in your code                                                                            
    >>> df                                                                                                                 
            Date  Hour
    0 2016-01-01     1
    1 2016-01-01     2
    2 2016-01-01     3
    3 2016-01-01     4
    

    然后通过向量化时间增量的加法构造'DateTime'列:

    >>> df['DateTime'] = df['Date'] + pd.to_timedelta(df['Hour'], 'h')                                                     
    >>> df                                                                                                                 
            Date  Hour            DateTime
    0 2016-01-01     1 2016-01-01 01:00:00
    1 2016-01-01     2 2016-01-01 02:00:00
    2 2016-01-01     3 2016-01-01 03:00:00
    3 2016-01-01     4 2016-01-01 04:00:00
    

    【讨论】:

    • 这就是我要找的,谢谢。
    【解决方案3】:

    参考这个并制作你自己的代码 如果需要将日期时间转换为其他格式,可以使用 dt.strftime(但请注意,列的 dtype 将是对象(字符串)):

    import pandas as pd
    
    df = pd.DataFrame({'DOB': {0: '26/1/2016 ', 1: '26/1/2016 '}})
    print (df)
    

    出生日期 0 26/1/2016 1 2016 年 1 月 26 日

    df['DOB'] = pd.to_datetime(df.DOB)
    print (df)
    

    出生日期 0 2016-01-26 1 2016-01-26

    df['DOB1'] = df['DOB'].dt.strftime('%m/%d/%Y')
    print (df)
    

    s DOB DOB1 0 2016-01-26 01/26/2016 1 2016-01-26 01/26/2016

    【讨论】:

      猜你喜欢
      • 2021-01-19
      • 1970-01-01
      • 1970-01-01
      • 2020-05-25
      • 2017-04-04
      • 1970-01-01
      • 1970-01-01
      • 2012-11-25
      • 1970-01-01
      相关资源
      最近更新 更多