Pandas提取Timedelta列时分秒构建datetime时报cannot convert series to int错误
问题根因
- 你调用的Python原生
datetime()构造函数只接受单个整数作为时分秒参数,而你传入的df['hst']是整列的Series对象,自然无法直接转换为单个int值,报错和你用astype(int)是否生效无关:astype(int)只是把Series内的每个元素转为int类型,整列本身的类型依然是pandas.core.series.Series,这是正常现象。 - 额外提示:你的ST/ET本身就是Timedelta格式,完全不需要额外提取时分秒再拼接,直接和基准日期相加即可,代码更简洁高效。
最优解决方案(无需提前提取时分秒)
直接用pandas的时间运算完成整列 datetime 构建:
import pandas as pd # 定义基准日期 base_date = pd.Timestamp('2021-07-11') # 直接和Timedelta列相加,一步生成对应datetime列 df['start_datetime'] = base_date + df['ST'] df['end_datetime'] = base_date + df['ET']
如果你确实需要用提取好的时分秒拼接
使用pandas自带的pd.to_datetime()向量化方法,支持直接传入Series作为时间分量参数:
df['start_datetime'] = pd.to_datetime({ 'year': 2021, 'month': 7, 'day': 11, 'hour': df['hst'], 'minute': df['mst'], 'second': df['sst'] })
不推荐的遍历方案(仅小数据量可用)
如果一定要用原生datetime构造,可以逐行遍历处理,但数据量大时性能远低于向量化方案:
from datetime import datetime df['start_datetime'] = df.apply( lambda row: datetime(2021,7,11, row['hst'], row['mst'], row['sst']), axis=1 )
内容的提问来源于stack exchange,提问作者vp_050
相关产品推荐
相关产品推荐

