从一个日期和时间字符串创建pandas数据,不带冒号

muk1a3rh  于 2023-05-12  发布在  其他
关注(0)|答案(1)|浏览(105)

我想从一个包含GNSS times和许多其他数据的文件中读取时间。预期的结果是一个datetime数据类型的pandas数组(Index或Series),其中应用了数据集的日期。
在中间步骤中,我有一个格式为hhmmss的时间戳列表,其中混合了一些无效数据:

import datetime as dt
import pandas as pd

date = dt.date(2023, 5, 9)
times_from_file = [",,,,,,"¸ "123456", "123457", "123458", "123459", "123500"]

我可以通过这个冗长的代码片段获得所需的输出:

datetimes = pd.to_datetime(
    times_from_file, format="%H%M%S", errors="coerce"
).map(
    lambda datetime: pd.NaT
    if pd.isnull(datetime)
    else dt.datetime.combine(date, datetime.time())
)

输出:

DatetimeIndex([                'NaT', '2023-05-09 12:34:56',
               '2023-05-09 12:34:57', '2023-05-09 12:34:58',
               '2023-05-09 12:34:59', '2023-05-09 12:35:00'],
              dtype='datetime64[ns]', freq=None)

然而,这看起来过于复杂。我希望这个问题可以用pd.to_timedelta来解决,但不幸的是,它不允许传递格式字符串。甚至pandas.Index.mapna_action关键字也被忽略了--这就是为什么我使用if pd.isnull(datetime)
有没有更简单的方法来做到这一点,最好是利用专门构建的Pandas函数或方法?

6pp0gazn

6pp0gazn1#

times_from_file转换为Series(如果尚未转换):

>>> pd.to_datetime('2023-05-09 ' + pd.Series(times_from_file), format="%Y-%m-%d %H%M%S", errors='coerce')

0                   NaT
1   2023-05-09 12:34:56
2   2023-05-09 12:34:57
3   2023-05-09 12:34:58
4   2023-05-09 12:34:59
5   2023-05-09 12:35:00
dtype: datetime64[ns]

相关问题