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

Pandas提取object类型Time字段小时遇TypeError的解决方法

解决pandas中Time字段提取小时的问题

嘿,刚看到你的问题啦~你遇到的TypeError: 'int' object is not subscriptable其实很好理清原因,咱们一步步来解决!

为啥会报错?

你写的循环里:

for row in range (1, len(accidents)):
    hour = row['Time'].strftime("%H").split(":", 1)[0]

这里的row是整数(从1开始的行号),不是DataFrame的行对象!所以你试图用row['Time']访问列,就会报错——整数可不能用下标访问呀😅。而且更重要的是,pandas处理数据尽量别用循环,效率太低了,咱们用矢量化操作才是正确打开方式!

推荐的解决方法

方法1:直接分割字符串(适合Time是字符串类型的情况)

因为你的Time字段是object类型(也就是字符串),直接按冒号分割取前面的小时部分就行:

# 新增Hour列,提取小时并转成整数
accidents['Hour'] = accidents['Time'].str.split(':', expand=True)[0].astype(int)

解释一下:

  • str.split(':', expand=True)把每个Time值按冒号拆成两列(小时和分钟)
  • 取索引为0的列就是小时部分,再用astype(int)转成整数类型,完美得到你要的结果(比如17:42变成17)

方法2:先转成时间类型(更灵活,适合后续时间操作)

如果之后你还要对时间做筛选、统计之类的操作,建议先把Time列转成datetime类型,再提取小时:

import pandas as pd

# 把Time列转成datetime格式(指定格式是小时:分钟)
accidents['Time'] = pd.to_datetime(accidents['Time'], format='%H:%M')
# 提取小时部分,直接得到整数
accidents['Hour'] = accidents['Time'].dt.hour

这种方法的好处是,之后你可以轻松做比如“统计早高峰(7-9点)的事故数量”这类时间相关分析,非常方便。

如果你非要用循环(不推荐,但新手可以了解)

要是你想试试循环写法,得用iterrows()遍历行对象,而不是行号:

# 先创建一个空的Hour列
accidents['Hour'] = 0
# 遍历每一行的索引和行对象
for idx, row in accidents.iterrows():
    # 拆分时间字符串取小时
    hour_str = row['Time'].split(':')[0]
    # 把小时写入对应的行
    accidents.loc[idx, 'Hour'] = int(hour_str)

⚠️ 注意:这种方法在数据量大的时候会很慢,尽量用前面两种矢量化方法哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 19:32:39