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

如何将时间序列DataFrame按Timestamp列升序排列?现有代码无效

问题原因

你的排序代码无效是因为Timestamp列存储的是字符串类型,而非日期时间类型。字符串排序采用字典序,和时间的 chronological 顺序并不一致。另外,你的数据中存在格式错误的时间戳(比如10.26-22 10.06 AM里的日期部分用了点号而非连字符),这也会干扰正确的解析和排序。

解决步骤

要实现正确的时间排序,需要先将字符串格式的时间戳转换为datetime类型,再进行排序。具体步骤如下:

  1. 清理时间戳格式:修复日期部分的标点错误(把点号替换成连字符)。
  2. 转换为日期时间类型:使用pandas.to_datetime将字符串解析为datetime对象。
  3. 按时间排序:基于转换后的日期时间列进行升序排序。
  4. 可选:恢复原字符串格式:如果需要将排序后的日期时间转回原字符串格式,可以使用dt.strftime。

完整代码示例

import pandas as pd

# 模拟你的DataFrame数据
data = {
    "Timestamp": [
        "10-26-22 10.00 AM",
        "10-26-22 09.04 AM",
        "10.26-22 10.06 AM",
        "10-27-22 3.32 AM",
        "10-27-22 3.36 PM",
        "10-27-22 3.31 PM",
        "10-27-22 3.37 AM",
        "10-28-22 4.20 AM"
    ],
    "Values": [1, 5, 6, 9, 5, 8, 8.23, 7.2]
}

df = pd.DataFrame(data)

# 1. 清理时间戳格式:替换日期部分的点号为连字符
df["Timestamp"] = df["Timestamp"].str.replace(r"(\d{2})\.(\d{2})-(\d{2})", r"\1-\2-\3", regex=True)

# 2. 转换为datetime类型,指定格式匹配你的时间字符串
df["Timestamp"] = pd.to_datetime(df["Timestamp"], format="%m-%d-%y %I.%M %p")

# 3. 按时间升序排序
df.sort_values("Timestamp", ascending=True, inplace=True)

# 4. 可选:转回原字符串格式(保留前导零,如09.04 AM)
df["Timestamp"] = df["Timestamp"].dt.strftime("%m-%d-%y %I.%M %p")

print(df)

排序后输出

Timestamp  Values
1  10-26-22 09.04 AM     5.0
0  10-26-22 10.00 AM     1.0
2  10-26-22 10.06 AM     6.0
3  10-27-22 03.32 AM     9.0
6  10-27-22 03.37 AM     8.23
5  10-27-22 03.31 PM     8.0
4  10-27-22 03.36 PM     5.0
7  10-28-22 04.20 AM     7.2

注意事项

  • 如果你的DataFrame中包含--------这样的分隔行,需要先过滤掉这些行再处理,处理完成后可以根据需求重新插入分隔行。
  • format参数的格式字符串要严格匹配你的时间戳格式:%m是两位月份,%d是两位日期,%y是两位年份,%I是12小时制的小时,%M是分钟,%p是AM/PM标识。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 22:40:57