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

如何从Dask DataFrame整数列创建时间格式列并解决map_partitions报错

错误原因

报错的核心是map_partitions的运行逻辑和Pandas逐元素处理逻辑存在差异:

  • Dask的map_partitions是将整个分区的完整Pandas Series作为参数传入你指定的dt.time函数,而dt.time仅接收整数类型入参,无法直接处理Series对象,因此抛出类型转换错误。
  • 你在Pandas中可以正常运行,大概率是实际调用的是Series.apply(dt.time),apply会逐元素将整数值传给dt.time,符合入参要求所以不会报错。
    另外你指定的meta也存在类型不匹配问题:dt.time返回的是Python原生datetime.time对象,不属于datetime64[ns]类型,即使调用逻辑修正后也会触发类型校验错误。

正确实现方案

方案1:在map_partitions中嵌套逐元素处理

如果你要沿用dt.time的实现逻辑,调整代码如下:

import datetime as dt
import dask.dataframe as dd

# meta指定为object类型,对应datetime.time对象
meta = ('time', 'object')
df['time'] = df['hora'].map_partitions(lambda s: s.apply(dt.time), meta=meta)

# 如果需要输出字符串格式的时间,可以改成如下写法
# df['time'] = df['hora'].map_partitions(lambda s: s.apply(lambda x: f"{x:02d}:00:00"), meta=('time', 'str'))
print(df.compute())

方案2:向量化操作实现(效率更高)

避免逐元素apply的性能损耗,直接用Dask内置向量化函数处理:

# 转成小时单位的timedelta,提取时间部分转为字符串
df['time'] = dd.to_timedelta(df['hora'], unit='h').astype(str).str[-8:]
print(df.compute())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 05:36:04