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

Pandas转换timestamp新增列报AttributeError:.str访问器仅可用于字符串值

报错原因

你遇到的报错核心原因有3个:

  1. 通过pd.DatetimeIndex(df['ArrivalDate']).time取出的是datetime.time类型对象,不是字符串,无法调用.str系列方法
  2. 你构造DataFrame时时间字段名为ArrivalPeriod,后续处理时错写为ArrivalDate,字段名不匹配
  3. pd.DatetimeIndex的日期属性是小写的.date,不是大写的.Date
正确实现代码(转换为当日总秒数)
import pandas as pd

# 注意时间值需要加引号转为字符串,否则Python会报语法错误
df = {
    'ArrivalPeriod': ['2018-10-30 06:49:57', '2019-11-30 07:42:53', '2018-11-28 02:21:57', '2018-10-30 06:49:57'],
    'time': [12, 8, 10, 10],
    'weekday': [4, 6, 5, 1]
}
df = pd.DataFrame(df)

# 先把时间字段转为datetime类型
df['ArrivalPeriod'] = pd.to_datetime(df['ArrivalPeriod'])

# 提取日期和时间列
df['Arrival_Date'] = df['ArrivalPeriod'].dt.date
df['Arrival_Time'] = df['ArrivalPeriod'].dt.time

# 直接通过属性计算当日总秒数,不需要拆分字符串
df['Arrival_Time_Seconds'] = df['ArrivalPeriod'].dt.hour * 3600 + df['ArrivalPeriod'].dt.minute *60 + df['ArrivalPeriod'].dt.second

# 如果你需要的是原代码的分钟数(小时*60+分钟),可以用下面这行
# df['Arrival_Time_Minutes'] = df['ArrivalPeriod'].dt.hour * 60 + df['ArrivalPeriod'].dt.minute

print(df)
代码说明
  • 直接用pandas datetime的内置dt访问器提取时分秒属性,计算效率比字符串拆分高3~5倍
  • 无需额外做类型转换,避免了格式不匹配的报错
  • 兼容不同格式的合法时间输入,鲁棒性更强

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 05:15:04