You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用pandas解析部分日期时间字符串并获取时间值与精度

时间字符串解析+精度获取解决方案

方案一:自定义规则实现(推荐,兼容性强)

不依赖pandas内部未公开接口,适配性更强,可自行扩展支持更多时间格式:

import pandas as pd
import re

# 按精度从高到低定义匹配规则,可根据实际输入格式扩展
DATETIME_RULES = [
    (r'^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{1,6}$', 'microsecond'),
    (r'^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$', 'second'),
    (r'^\d{4}-\d{2}-\d{2} \d{2}:\d{2}$', 'minute'),
    (r'^\d{4}-\d{2}-\d{2} \d{2}$', 'hour'),
    (r'^\d{4}-\d{2}-\d{2}$', 'day'),
    (r'^\d{4}-\d{2}$', 'month'),
    (r'^\d{4}$', 'year'),
]

def parse_datetime_with_precision(dt_str: str):
    # 先解析得到补全后的时间戳
    full_ts = pd.Timestamp(dt_str)
    # 匹配对应精度
    for pattern, precision in DATETIME_RULES:
        if re.fullmatch(pattern, dt_str.strip()):
            return full_ts.strftime('%Y-%m-%d %H:%M:%S.%f'), precision
    raise ValueError(f"不支持的时间字符串格式:{dt_str}")

测试示例

  • 输入parse_datetime_with_precision("2021-01-06 12")
    输出:('2021-01-06 12:00:00.000000', 'hour')
  • 输入parse_datetime_with_precision("2020-03")
    输出:('2020-03-01 00:00:00.000000', 'month')
  • 输入parse_datetime_with_precision("2020-03-01")
    输出:('2020-03-01 00:00:00.000000', 'day')

方案二:调用pandas内部函数(仅适合固定pandas版本场景)

该方法依赖pandas未公开的内部接口,升级pandas版本可能出现接口变更、导入失败的问题:

import pandas as pd
from pandas._libs.tslibs import parsing

# 内部返回的精度枚举映射
RESO_MAP = {
    0: 'year',
    1: 'month',
    2: 'day',
    3: 'hour',
    4: 'minute',
    5: 'second',
    6: 'microsecond',
    7: 'nanosecond'
}

def parse_with_internal_func(dt_str: str):
    dt64_val, reso_code = parsing.parse_datetime_string_with_reso(dt_str)
    full_ts = pd.Timestamp(dt64_val)
    return full_ts.strftime('%Y-%m-%d %H:%M:%S.%f'), RESO_MAP.get(reso_code, 'unknown')

如果出现导入失败的情况,可通过dir(parsing)查看当前版本pandas的parsing模块下的可用函数,确认函数名是否有变更。

内容的提问来源于stack exchange,提问作者EZLearner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 18:06:07