pie*_*etz 5 python format datetime parsing python-polars
我正在寻找一种方法来检测strftimePython 中日期时间字符串的 -style 格式。我发现的所有日期时间库都具有解析字符串以创建日期时间对象的功能,但我想检测可与格式datetime.strptime参数一起使用的格式或模式。
为什么?我正在处理长列表(或系列)的日期时间字符串,并使用dateutil.parser它们来解析它们太不准确且缓慢。
所以我想检测格式。一旦有了这个,我就可以使用该to_datetime函数polars以更快的方式创建日期时间序列。
我在更现代的日期时间库(如钟摆)中找不到这样的功能。我还实现了我自己的版本,它迭代固定的格式列表并检查是否可以使用datetime.strptime如下方式读取它:
patterns = [
"%Y.%m.%d %H:%M:%S",
"%Y-%m-%d %H:%M",
"%Y-%m-%d",
...
]
for pattern in patterns:
try:
for val in col:
assert datetime.datetime.strptime(val, pattern)
return pattern
except:
continue
Run Code Online (Sandbox Code Playgroud)
这对我来说并不是一个优雅的解决方案,我想知道是否有更好的方法来做到这一点,甚至有一个可用的库可以完成此类事情。
将您的任务外包给pandas以使用其新的 mixed 日期解析怎么样?
dt_strs = [\n "Mon, 29 May 2023 13:15:09 +0000", # Day, DD Month YYYY HH:MM:SS +0000\n "10/01/2020 12:15:33", # MM/DD/YYYY HH:MM:SS\n "2020-08-01", # YYYY-MM-DD\n "08:55", # HH:MM\n "2019.09.18T18:51:57", # YYYY.MM.DDTHH:MM:SS\n "11:29:10", # HH:MM:SS\n "23/05/2022 03:30:00 +0500", # DD/MM/YYYY HH:MM:SS +0000\n "02.28.19", # MM.DD.YY\n "2023-01-01 22:23", # YYYY-MM-DD HH:MM\n "31 jul, 2022", # DD Month, YYYY\n "2021/12/18 06:13:08", # YYYY/MM/DD HH:MM:SS\n "2023", # YYYY\n]\n\npl_ser = pl.from_pandas(pd.to_datetime(dt_strs, format="mixed").to_series(name="dts"))\nRun Code Online (Sandbox Code Playgroud)\n输出 :
\nprint(pl_ser)\n\nshape: (12,)\nSeries: \'dts\' [datetime[\xce\xbcs, UTC]]\n[\n 2023-05-29 13:15:09 UTC\n 2020-10-01 12:15:33 UTC\n 2020-08-01 00:00:00 UTC\n 2023-05-29 08:55:00 UTC\n 2019-09-18 18:51:57 UTC\n 2023-05-29 11:29:10 UTC\n 2022-05-22 22:30:00 UTC\n 2019-02-28 00:00:00 UTC\n 2023-01-01 22:23:00 UTC\n 2022-07-31 00:00:00 UTC\n 2021-12-18 06:13:08 UTC\n 2023-01-01 00:00:00 UTC\n]\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
676 次 |
| 最近记录: |