首页 > 解决方案 > 如何在python 3中的变量中将日期转换为小时和分钟?

问题描述

我有一个数据集,其日期格式如下2021-06-18 23:30:00,python 将其作为字符读取。我想创建一个只包含日期的小时和分钟的变量。这是我尝试过的,没有有用的结果:

from datetime import datetime
df["hours"] = datetime.strptime(df["Date"], '%Y-%m-%d %H:%M:%S').strftime('%H:%M')

上面的代码给了我一个错误。

在 R 中,这可以使用

df$hours <- format(strptime(df$Date, "%Y-%m-%d %H:%M:%S"), "%H:%M")

我也尝试在 python 上做同样的事情,但同样没用

df["hours"] = format(datetime.strptime(df["Date"],"%Y-%m-%d %H:%M:%S"), "%H:%M")

两个python代码都给我以下错误:

TypeError: strptime() argument 1 must be str, not Series

这是我的数据框

df.head()

                   Date    Open    High    Low    Close Volume
0   2006-04-13 10:00:00 1921.75 1922.00 1918.00 1918.25 11782
1   2006-04-13 10:30:00 1918.25 1931.75 1918.00 1931.00 39744
2   2006-04-13 11:00:00 1931.25 1934.00 1929.00 1930.25 34385
3   2006-04-13 11:30:00 1930.50 1932.00 1928.50 1931.25 13539
4   2006-04-13 12:00:00 1931.25 1932.25 1928.25 1928.75 10045

标签: pythondatetime

解决方案


您已将整个系列作为参数传递给.strptime.

这是一个最小的、可重现的示例,它将函数应用于系列的每个成员:

import pandas as pd
df = pd.DataFrame(['2021-06-18 23:30:00','2021-06-19 01:02:03'],columns=['Date'])
print(df)
print()
df['hours'] = df['Date'].apply(lambda x: datetime.strptime(x,'%Y-%m-%d %H:%M:%S').strftime('%H:%M'))
print(df)

输出:

                  Date
0  2021-06-18 23:30:00
1  2021-06-19 01:02:03

                  Date  hours
0  2021-06-18 23:30:00  23:30
1  2021-06-19 01:02:03  01:02

推荐阅读