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

如何用Pandas/Numpy/Python扁平化去重时间戳列表并格式化

最优方案选择:Pandas/Numpy/原生Python处理嵌套时间戳列表

问题背景

我有一个嵌套的pd.Timestamp类型列表(类型提示:list[list[pd.Timestamp]]),示例代码如下:

import pandas as pd
import numpy as np

# 嵌套的Pandas时间戳列表示例
input = [[pd.Timestamp('2023-09-01 10:00:00'), pd.Timestamp('2023-09-01 11:00:00')],
        [pd.Timestamp('2023-09-02 12:00:00'), pd.Timestamp('2023-09-02 13:00:00')],
        [pd.Timestamp('2023-09-03 14:00:00'), pd.Timestamp('2023-09-03 15:00:00')]]

# 调试用的DataFrame转换
input_df = pd.DataFrame(input, columns=['left', 'right'])

需要完成以下操作:

  1. 扁平化输入列表
  2. 移除重复的时间戳
  3. 以矢量化方式对所有元素应用strftime("%Y/%m/%d/%H")格式

最优方案:Pandas(最快且最优雅)

Pandas在时间序列数据处理上有天然优势,矢量化操作效率高,代码极简:

两种实现方式

# 方式1:直接从原始嵌套列表处理
flat_ts = pd.Series([ts for sublist in input for ts in sublist])
unique_formatted = flat_ts.drop_duplicates().dt.strftime("%Y/%m/%d/%H").tolist()

# 方式2:从已有的input_df处理(更简洁)
unique_formatted = input_df.stack().drop_duplicates().dt.strftime("%Y/%m/%d/%H").tolist()

核心优势

  • 代码简洁:stack()一键完成扁平化,drop_duplicates()去重,dt.strftime()是原生矢量化时间格式化方法,无需手动循环
  • 效率最高:Pandas内部基于C扩展实现,比纯Python循环快数倍,数据量越大优势越明显
  • 可读性强:完全贴合时间序列数据的处理习惯,逻辑清晰

Numpy方案

可通过转换为numpy datetime64类型处理,但步骤繁琐:

# 扁平化并转为numpy datetime64数组
flat_np = np.array([ts for sublist in input for ts in sublist], dtype='datetime64[s]')
# 去重
unique_np = np.unique(flat_np)
# 格式化:需转回Python datetime对象,失去矢量化优势
formatted = [pd.Timestamp(ts).strftime("%Y/%m/%d/%H") for ts in unique_np]

优缺点

  • 去重操作np.unique()效率不错,但格式化环节需要转回Python对象,无法全程矢量化
  • 代码比Pandas冗余,缺乏针对时间格式化的原生支持,不够直观

原生Python方案

纯循环处理,仅适合极小数据量:

# 扁平化
flat_py = [ts for sublist in input for ts in sublist]
# 去重:用dict.fromkeys保留原始顺序
unique_py = list(dict.fromkeys(flat_py))
# 格式化
formatted_py = [ts.strftime("%Y/%m/%d/%H") for ts in unique_py]

优缺点

  • 逻辑直观但代码冗余,循环操作在数据量较大时性能极差
  • 无矢量化优化,整体效率远低于前两者

总结

  • 大数据量场景:优先选Pandas,兼顾效率与优雅性,完全匹配需求
  • 底层数组操作需求:可选Numpy,但时间格式化环节不够便利
  • 极小数据量脚本:原生Python可快速实现,但不推荐用于常规业务场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 23:08:15