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

Pandas遍历datetime.time列报错及多格式时间标准化问题

问题1:如何遍历DataFrame中存储datetime.time类型的列?

你遇到的cannot unpack non-iterable 'datetime.time' object错误原因很明确:

  • 第一个循环for index, time in df['Time']:df['Time']是Pandas Series,迭代时每个元素是单独的datetime.time对象,并非(index, value)元组,因此无法解包。
  • 第二个循环enumerate(df['Time'])虽能拿到索引和值,但直接拼接time + " " + index会报错——time是datetime.time对象、index是整数,都不能直接与字符串相加。

正确遍历方式

若要遍历索引和时间值,可使用Series.items()方法:

import pandas as pd

df = pd.read_excel("some/file.xls")
for index, time_val in df['Time'].items():
    # 将时间对象、索引转为字符串后拼接输出
    print(f"{time_val} {index}")

或用enumerate并处理类型转换:

for idx, time_val in enumerate(df['Time']):
    print(f"{time_val} {idx}")

给无毫秒的时间添加.000000

无需手动遍历,用Pandas矢量化操作更高效:

def format_time(t):
    # 通过microsecond属性判断是否有毫秒部分
    if t.microsecond == 0:
        return f"{t.strftime('%H:%M:%S')}.000000"
    else:
        return t.strftime('%H:%M:%S.%f')

df['Formatted_Time'] = df['Time'].apply(format_time)

也可用更简洁的lambda写法:

df['Formatted_Time'] = df['Time'].apply(
    lambda t: t.strftime('%H:%M:%S.%f') if t.microsecond != 0 else f"{t.strftime('%H:%M:%S')}.000000"
)

问题2:处理datetime.time类型的多格式时间转换

Excel中公式计算得到的时间是datetime.time对象,并非字符串,因此你之前判断'.' in date的方法完全不适用——date是时间对象,不是字符串。

正确处理方式

我们可以直接通过datetime.time对象的microsecond属性判断是否包含毫秒,再进行转换:
如果要转成datetime.datetime类型:

from datetime import datetime, date

def time_to_datetime(t):
    # 将时间对象与基准日期组合为datetime
    dt = datetime.combine(date.today(), t)
    if t.microsecond == 0:
        # 转成带.000000的字符串后再转回datetime
        return datetime.strptime(dt.strftime('%Y-%m-%d %H:%M:%S.000000'), '%Y-%m-%d %H:%M:%S.%f')
    else:
        return dt

df['Datetime'] = df['Time'].apply(time_to_datetime)

如果仅需要格式化后的字符串,直接使用问题1中的format_time函数即可,它会自动处理两种情况,输出统一格式的字符串。

另外,读取Excel时若想直接处理时间列,可尝试指定parse_dates参数,但由于Excel时间本质是数值类型,Pandas仍会自动转为datetime.time,因此后续处理更可靠。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 22:05:20