繁体   English   中英

将“对象”列转换为日期时间

[英]Convert 'object' column to datetime

我目前有以下dataframe(下面显示7天,1天)。 营业时间为 01:00 至 24:00。 如何将 HourEnding 列转换为 datetime 格式并将其与 date_time 列(已经是 datetime 格式)结合起来?

    HourEnding  LMP date_time
0   01:00   165.27  2021-02-20
1   02:00   155.89  2021-02-20
2   03:00   154.50  2021-02-20
3   04:00   153.44  2021-02-20
4   05:00   210.15  2021-02-20
5   06:00   298.90  2021-02-20
6   07:00   152.71  2021-02-20
7   08:00   204.61  2021-02-20
8   09:00   155.77  2021-02-20
9   10:00   90.64   2021-02-20
10  11:00   57.17   2021-02-20
11  12:00   43.74   2021-02-20
12  13:00   33.42   2021-02-20
13  14:00   5.05    2021-02-20
14  15:00   1.43    2021-02-20
15  16:00   0.99    2021-02-20
16  17:00   0.94    2021-02-20
17  18:00   12.13   2021-02-20
18  19:00   18.90   2021-02-20
19  20:00   19.04   2021-02-20
20  21:00   16.42   2021-02-20
21  22:00   14.47   2021-02-20
22  23:00   44.55   2021-02-20
23  24:00   40.51   2021-02-20

到目前为止我已经尝试过

df['time'] = pd.to_datetime(df['HourEnding'])

但这似乎因为 24:00 而失败。 相似地

df['time'] = pd.to_timedelta('HourEnding', 'h', errors = 'coerce')

产生一列 NaT。

正如您在评论中提到的,24 小时对应于同一天的午夜。 我会简单地将“24”替换为“00”:

df['HourEnding'] = df.HourEnding.str.replace('24:00', '00:00')

然后,将date_time转换为字符串:

df['date_time'] = df.date_time.astype(str)

创建一个连接date_timeHourEnding的新列:

df['date_and_hour'] = df.date_time + " " + df.HourEnding
df['date_and_hour'] = pd.to_datetime(df.date_and_hour)

这给了你这个:

>>> df
   HourEnding     LMP   date_time       date_and_hour
0       01:00  165.27  2021-02-20 2021-02-20 01:00:00
1       02:00  155.89  2021-02-20 2021-02-20 02:00:00
2       03:00  154.50  2021-02-20 2021-02-20 03:00:00
3       04:00  153.44  2021-02-20 2021-02-20 04:00:00
4       05:00  210.15  2021-02-20 2021-02-20 05:00:00
5       06:00  298.90  2021-02-20 2021-02-20 06:00:00
6       07:00  152.71  2021-02-20 2021-02-20 07:00:00
7       08:00  204.61  2021-02-20 2021-02-20 08:00:00
8       09:00  155.77  2021-02-20 2021-02-20 09:00:00
9       10:00   90.64  2021-02-20 2021-02-20 10:00:00
10      11:00   57.17  2021-02-20 2021-02-20 11:00:00
11      12:00   43.74  2021-02-20 2021-02-20 12:00:00
12      13:00   33.42  2021-02-20 2021-02-20 13:00:00
13      14:00    5.05  2021-02-20 2021-02-20 14:00:00
14      15:00    1.43  2021-02-20 2021-02-20 15:00:00
15      16:00    0.99  2021-02-20 2021-02-20 16:00:00
16      17:00    0.94  2021-02-20 2021-02-20 17:00:00
17      18:00   12.13  2021-02-20 2021-02-20 18:00:00
18      19:00   18.90  2021-02-20 2021-02-20 19:00:00
19      20:00   19.04  2021-02-20 2021-02-20 20:00:00
20      21:00   16.42  2021-02-20 2021-02-20 21:00:00
21      22:00   14.47  2021-02-20 2021-02-20 22:00:00
22      23:00   44.55  2021-02-20 2021-02-20 23:00:00
23      00:00   40.51  2021-02-20 2021-02-20 00:00:00

>>> df.dtypes
HourEnding               object
LMP                     float64
date_time                object
date_and_hour    datetime64[ns]

将两列都转换为字符串,然后将它们加入一个新的“日期时间”列,最后将“日期时间”列转换为日期时间。

编辑:要处理 1-24 小时问题,请构建一个 function 来拆分字符串并从每个小时中减去 1,然后加入:

def subtract_hour(t):
    t = t.split(':')
    t[0] = str(int(t[0]) - 1)
    if len(t[0]) < 2:
        t[0] = '0' + t[0]
    return ':'.join(t)

然后您可以将其应用于您的小时列(例如, df['hour'] = df['hour'].apply(subtract_hour) )并继续加入列,然后使用pd.to_datetime进行解析。

编辑 2:您只想将“24”更改为“00”,我的错。

def mod_midnight(t):
    t = t.split(':')
    if t[0] == '24':
        t[0] = '00'
    return ':'.join(t)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM