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

Flask搭建ML模型API时pd.to_datetime触发TypeError类型报错

问题背景

使用Flask框架为机器学习模型搭建API接口,传入数据执行预测逻辑时触发报错:
TypeError: arg must be a string, datetime, list, tuple, 1-d array, or Series
经定位,报错指向关联代码段的第4行。

关联报错代码
trans_date_trans_time = request.form['trans_date_trans_time']
trans_date = pd.DatetimeIndex([trans_date_trans_time]).date
trans_time = pd.DatetimeIndex([trans_date_trans_time]).time
trans_date = pd.to_datetime([trans_date])
del trans_date_trans_time

trans_date = pd.to_datetime([trans_date])
trans_date = trans_date.map(dt.datetime.toordinal)
trans_time = pd.to_datetime([trans_time], format='%H:%M:%S')
trans_time = 3600 * pd.DatetimeIndex([trans_time]).hour + 60 * pd.DatetimeIndex(
    [trans_time]).minute + pd.DatetimeIndex([trans_time])
报错原因

第2行通过pd.DatetimeIndex([trans_date_trans_time]).date拿到的是numpy ndarray类型的日期数组,第4行直接把这个数组整体套一层列表传入pd.to_datetime,相当于传入了嵌套结构的非法参数,pandas无法识别该输入类型,直接抛出类型错误。
后续代码还存在重复解析时间、嵌套包装DatetimeIndex的同类问题,即便修完第4行,后续时间转换逻辑依然会触发同类报错。

修复方案
  • 同一份时间字符串只做一次解析,避免重复调用pd.to_datetime产生冗余计算和类型问题
  • 单条数据处理场景下,从DatetimeIndex取日期、时间、时分秒属性时,直接通过索引取标量值,不要将整个属性数组嵌套包装后传入时间处理函数
  • 修正时间转当日秒数的计算逻辑,直接从已解析的时间对象上取时分秒值计算,避免重复构造DatetimeIndex

修复后可正常运行的代码如下:

import datetime as dt
import pandas as pd

# 从请求参数中读取原始时间字符串
trans_date_trans_time = request.form['trans_date_trans_time']
# 一次性解析时间字符串生成DatetimeIndex对象
dt_index = pd.DatetimeIndex([trans_date_trans_time])

# 处理日期:转成datetime序数
trans_date = dt_index.date[0]
trans_date = dt.datetime.toordinal(pd.to_datetime(trans_date))

# 处理时间:转成当日累计秒数
trans_time_sec = 3600 * dt_index.hour[0] + 60 * dt_index.minute[0] + dt_index.second[0]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 07:21:20