Pandas转换timestamp新增列报AttributeError:.str访问器仅可用于字符串值
报错原因
你遇到的报错核心原因有3个:
- 通过
pd.DatetimeIndex(df['ArrivalDate']).time取出的是datetime.time类型对象,不是字符串,无法调用.str系列方法 - 你构造DataFrame时时间字段名为
ArrivalPeriod,后续处理时错写为ArrivalDate,字段名不匹配 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
相关产品推荐
相关产品推荐

