向日期添加float/int类型秒数报timedelta秒组件不支持Timestamp错误如何解决
问题原因
你遇到的报错核心不是float类型不支持,而是代码的缩进和逻辑错误,把原本存秒数的变量P错误赋值成了Timestamp时间对象:
- 你错误把后续业务逻辑缩进放到了
else代码块中,当itp为空时,先给P赋值为0,紧接着又执行P= pd.to_datetime(date) + pd.DateOffset(seconds=30),此时P就从数字变成了时间戳类型,后续把这个时间戳传给pd.DateOffset(seconds=P),自然就报类型不匹配的错误。 - 额外还有两个明显问题:代码中用到的
t1变量没有定义;循环变量i全程未使用,每次循环都固定取df.iloc[5,1],不符合常规遍历逻辑。
修复方案
pd.DateOffset本身完全支持float类型的秒数参数,只要修正逻辑错误,保证传给seconds的参数是数字即可:
import pandas as pd from datetime import datetime # 初始化起始日期直接存datetime类型,避免反复转换 first_day = df.iloc[1, 0][0:8] current_date = datetime.strptime(first_day, '%Y%m%d') with open('myfile.txt','w') as f: for i in range(len(df)): # 按业务需求调整取数逻辑,原固定取第5行可按需修改 itp = df.iloc[i, 1].replace('[', '').replace(']', '') if itp != '': # 计算秒数,保留float类型 P = float(itp) / 100 else: P = 0 # 业务逻辑移到if/else外部,不要嵌套在else中 t1 = current_date + pd.DateOffset(seconds=30) t2 = current_date + pd.DateOffset(seconds=P) # 修复t1未定义问题,更新当前日期给下一轮循环使用 current_date = t1 - pd.DateOffset(seconds=15) print(current_date, P, t2, file = f)
修复后不管传整数秒还是3.14这类浮点秒,都可以正常运行。
内容的提问来源于stack exchange,提问作者Aqeel
相关产品推荐
相关产品推荐

