如何在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
相关产品推荐
相关产品推荐

