【问题标题】:Multiple date conversions in PandasPandas 中的多个日期转换
【发布时间】:2022-06-28 21:51:58
【问题描述】:

我有一个包含多行的数据框,例如以下示例,其中包含两个单独的对象(字符串)列,例如:

Date         Time
18 Jun 2022  10:22
18 Jun 2022  10:03
15 Jun 2022  21:34

我需要创建一个新列,其中包含一个整数,描述自 epoch 结合这两列以来的秒数

我在 lambda 函数中使用 strptime 将日期更改为“YYYY-MM-DD”格式,其中 MM 现在是一个零领导的月份数字,例如“06”而不是“Jun”,所以新的数据框是这样的:

Date         Time   NewDate
18 Jun 2022  10:22  2022-06-18
18 Jun 2022  10:03  2022-06-18
15 Jun 2022  21:34  2022-06-15

其中 Date 和 Time 是对象,但 NewDate 是 DateTime。

我被困在尝试使用 strftime 将 NewDate 日期时间值重新转换为字符串,然后将 Time 字符串也连接起来,然后将其更改为自纪元以来的最终秒数。

当然,也许有更好的整体想法/策略。

感谢您的帮助。

【问题讨论】:

  • "自纪元以来的秒数" 你的意思是 Unix 纪元?
  • 我需要一个渐进的数字来绘制时间序列并围绕我认为最简单的是自 Unix 纪元以来的秒数,是的。理想情况下,最好将最旧的时间戳设为 0 并计算从该时间戳开始的秒数 :) 谢谢

标签: python pandas datetime


【解决方案1】:

你可以create a datetime数据类型列之类的

df['datetime'] = pd.to_datetime(df['Date'] + ' ' + df['Time'])

df 
          Date   Time            datetime
0  18 Jun 2022  10:22 2022-06-18 10:22:00
1  18 Jun 2022  10:03 2022-06-18 10:03:00
2  15 Jun 2022  21:34 2022-06-15 21:34:00

pandas datetime 在内部使用 Unix 时间,但自纪元以来为纳秒。因此,您可以转换为自 Unix 纪元以来的秒数,例如

df['unix'] = df['datetime'].astype('int64')/1e9

df 
          Date   Time            datetime          unix
0  18 Jun 2022  10:22 2022-06-18 10:22:00  1.655548e+09
1  18 Jun 2022  10:03 2022-06-18 10:03:00  1.655547e+09
2  15 Jun 2022  21:34 2022-06-15 21:34:00  1.655329e+09

请注意,由于我们没有设置时区,“日期时间”将假定为 UTC。

要获取相对于最早日期的秒数,您可以使用

df['unix']-df['unix'].min()

# or if you don't actually need Unix time:
(df['datetime']-df['datetime'].min()).dt.total_seconds()

【讨论】:

  • 哇,所以我不需要复杂的 strptime 来将月份从字母更改为数字。 ...哇 :) 非常感谢
  • @RobertAlexander 我已经链接了文档;我认为 pd.to_datetime 没有办法 ;-) 请注意,一般情况下,根据您的输入,会有一些注意事项,例如如果这一天先到等等。但是在这里一切正常。
猜你喜欢
  • 2018-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-27
  • 1970-01-01
  • 2020-11-15
  • 2021-04-19
相关资源
最近更新 更多