【问题标题】:Python change time formatPython更改时间格式
【发布时间】:2022-01-23 00:39:57
【问题描述】:

我正在尝试将我现在采用 15:41:28:4330 或 hh:mm:ss:msmsmsms 形式的数据的时间格式更改为秒。

我浏览了一些 pandas 文档,但似乎在任何地方都找不到这种格式。

是否可以简单地从该时间格式逐行计算秒数?

【问题讨论】:

  • 重要的是类型,而不是形式:你说的是datetime对象,还是timedelta对象,还是15:41:28:4330是一个字符串?
  • 秒是什么意思?预期的结束格式是什么?
  • 预期输出将帮助我们帮助您:)
  • 这能回答你的问题吗? How to convert a time string to seconds?
  • @jojo 如何检测它是否是 str/datetime/timedelta?

标签: python pandas time timedelta


【解决方案1】:

您需要获取 timedelta 并使用 total_seconds 方法获取午夜后的秒数。因此,您可以先解析为日期时间,然后减去默认日期(将自动添加)。例如:

#1 - 通过日期时间

import pandas as pd

df = pd.DataFrame({'time': ["15:41:28:4330"]})
df['time'] = pd.to_datetime(df['time'], format='%H:%M:%S:%f')
df['sec_after_mdnt'] = (df['time']-df['time'].dt.floor('d')).dt.total_seconds()

df
                     time  sec_after_mdnt
0 1900-01-01 15:41:28.433       56488.433

或者,您可以清理时间格式并直接解析为 timedelta:

#2 - str 清理和时间增量

df = pd.DataFrame({'time': ["15:41:28:4330"]})
# last separator must be a dot...
df['time'] = df['time'].str[::-1].str.replace(':', '.', n=1, regex=False).str[::-1]
df['sec_after_mdnt'] = pd.to_timedelta(df['time']).dt.total_seconds()

df
            time  sec_after_mdnt
0  15:41:28.4330       56488.433

【讨论】:

  • 第一种方法就像一个魅力,第二种方法返回一个不推荐使用的错误。非常感谢,这正是我想要的。这比在 for 循环中逐行计算要快得多。
  • @user2882635 已弃用的错误?很有趣,我没有得到任何东西,pd.__version__ 1.3.5,你能补充一下细节吗?
  • 错误消息:“FutureWarning:不推荐将 datetime64-dtype 数据传递给 TimedeltaIndex,将在未来版本中引发 TypeError”我正在使用 python 2.7,pandas u'0.24.2'(长篇大论,与 openCV 的一些兼容性问题,留在这些版本上更容易)
  • @user2882635 好的,这几天已经不常见了^^无论如何,很高兴第一种方法有效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-12
  • 2011-07-27
  • 2015-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多