【问题标题】:Extract hour and minutes from timestamp but keep it in datetime format从时间戳中提取小时和分钟,但保留日期时间格式
【发布时间】:2020-04-04 18:50:37
【问题描述】:

我有一个像这样的数据框

   open  Start show Einde show
5   NaN     11:30   NaN
6   16:00   18:00   19:45
7   14:30   16:30   18:15
8   NaN     NaN      NaN
9   18:45   20:45   22:30

这些时间是字符串格式,我想将它们转换为日期时间格式。 每当我尝试使用pd.to_datetime(evs['open'], errors='coerce')(更改其中一列)时,它会将小时更改为完整的日期时间格式,如下所示:2020-04-03 16:00:00 与今天的日期。我想要一个小时,但仍然是日期时间格式,所以我可以添加分钟等。

现在当我使用dt.hour 访问小时时,它返回一个字符串,而不是HH:MM 格式。

有人可以帮帮我吗?我正在通过 Pandas read_csv 读取 CSV,但是当我使用日期解析器时,我遇到了同样的问题。理想情况下,这将在 read_csv 部分而不是单独修复,但此时我会采取任何措施。

谢谢!

【问题讨论】:

  • pd.to_datetime(evs['open']).dt.time
  • @Chris 谢谢,这给了我16:00:00 格式,但我想摆脱秒数
  • 我不认为你可以去掉秒数并保持datetime.time的类型,因为16:00:00只是datetime.time(16, 0)如果你想将它格式化为@987654333,你可以转换为字符串@:pd.to_datetime(evs['open']).dt.strftime('%H:%M')
  • @Chris 好的,谢谢!我正在寻找接近 R 的 Lubridate 包的东西。我想我将不得不保持秒数。您知道如何在 read_csv 函数中将日期解析为这种格式吗?因为在使用 parse_dates 时我仍然可以获得完整的日期/时间
  • 我不认为你可以使用 parse_dates 参数因为文件的格式;但是,如果您的所有列都是时间(例如在您的示例数据中),您可以在将文件读入内存后堆叠和取消堆叠:pd.to_datetime(df.stack()).dt.time.unstack()

标签: python pandas datetime


【解决方案1】:

正如 Chris 所说,不能仅将小时和分钟转换为日期时间格式。但是您可以使用 timedeltas 来解决您的问题。

import datetime
import pandas as pd

def to_timedelta(date): 
    date = pd.to_datetime(date)
    try:
        date_start = datetime.datetime(date.year, date.month, date.day, 0, 0)
    except TypeError:
        return pd.NaT # to keep dtype of series; Alternative: pd.Timedelta(0)
    return date - date_start


df['open'].apply(to_timedelta)

输出:

5        NaT
6   16:00:00
7   14:30:00
8        NaT
9   18:45:00
Name: open, dtype: timedelta64[ns]

现在您可以使用 datetime.timedelta 来添加/减去分钟、小时或其他内容:

df['open'] + datetime.timedelta(minutes=15)

输出:

5        NaT
6   16:15:00
7   14:45:00
8        NaT
9   19:00:00
Name: open, dtype: timedelta64[ns]

此外,恢复完整的日期时间非常容易:

df['open'] + datetime.datetime(2020, 4, 4)

输出:

5                   NaT
6   2020-04-04 16:00:00
7   2020-04-04 14:30:00
8                   NaT
9   2020-04-04 18:45:00
Name: open, dtype: datetime64[ns]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-10
    • 2017-02-01
    • 1970-01-01
    • 2017-08-01
    相关资源
    最近更新 更多