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

如何在Pandas DataFrame中将时间戳转秒及解决报错

解决Pandas时间戳转秒值列表的问题

错误原因分析

你的代码存在两个关键问题:

  • 变量名冲突:列表名time和循环迭代变量time重复,会导致列表被覆盖,后续append操作失效。
  • 无效的datetime构造:dt = datetime(dt_object)完全多余,dt_object已经是datetime.datetime对象,无需再用datetime()包裹,这就是触发TypeError的直接原因。

最优解法:用Pandas内置方法(高效无循环)

Pandas针对时间序列处理有专门优化,无需手动写循环,直接用内置方法就能快速实现:

import pandas as pd

# 构造你的DataFrame
df = pd.DataFrame({
    'Timestamp': [1662189653, 1662189669, 1662189688],
    'Position': [53, 34, 21],
    'Speed': [20, 12, 19]
})

# 若仅需提取原始秒值组成列表,直接取列转列表即可
seconds_list = df['Timestamp'].tolist()

# 若需先转datetime再计算到epoch的秒数(结果与原始值一致)
df['datetime'] = pd.to_datetime(df['Timestamp'], unit='s')
seconds_list = (df['datetime'] - pd.Timestamp('1970-01-01')).dt.total_seconds().tolist()

print(seconds_list)
# 输出:[1662189653, 1662189669, 1662189688]

修正你的循环代码

如果坚持用循环+datetime模块实现,修正后的代码如下:

from datetime import datetime

# 假设t是从DataFrame取出的Timestamp列值,如t = df['Timestamp'].tolist()
t = [1662189653, 1662189669, 1662189688]
time_list = []  # 修改变量名,避免与迭代变量冲突

for ts in t:
    dt_object = datetime.fromtimestamp(ts)
    epoch_time = datetime(1970, 1, 1)
    delta = dt_object - epoch_time
    time_list.append(delta.total_seconds())  # 提取timedelta对应的总秒数

print(time_list)
# 输出:[1662189653.0, 1662189669.0, 1662189688.0]

修正点:

  • 重命名列表为time_list,避免变量名冲突
  • 删除多余的dt = datetime(dt_object)行
  • 用delta.total_seconds()获取实际秒值(原代码append的是timedelta对象,不是秒数值)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 04:26:03