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

使用Python 3按UTC时间排序CSV文件遇到问题求助

解决Pandas按UTC时间列排序CSV文件的问题

嘿,我来帮你搞定这个排序问题!你的代码出问题是因为对Pandas DataFrame的排序逻辑理解有误,咱们一步步梳理清楚:

原代码的核心错误

  • 你使用了Python内置的sorted()函数来处理DataFrame,但sorted()会迭代DataFrame的列名而非行数据,所以row[1]根本不是你要的UTC时间值,这会直接引发解析错误。
  • 退一步说,就算sorted()能正确处理行,它返回的是普通Python列表,而不是Pandas DataFrame对象——列表没有to_csv()方法,所以最后一步肯定会报错。

正确的实现方式

Pandas提供了专门的sort_values()方法来处理DataFrame排序,而且我们可以让Pandas自动解析时间列,让排序更高效准确:

完整可运行代码

import pandas as pd

# 读取CSV:用任意空格作为分隔符,自动解析utc_time列为datetime类型
df = pd.read_csv("input.csv", sep="\s+", parse_dates=["utc_time"])

# 按utc_time列升序排序(默认ascending=True,对应你要的从早到晚顺序)
df_sorted = df.sort_values(by="utc_time")

# 保存结果:不写入索引列,保持原文件的空格分隔格式
df_sorted.to_csv("output.csv", index=False, sep=" ")

关键参数解释

  • sep="\s+":你的CSV用空格分隔时间和其他字段,这个参数能识别任意数量的空格作为分隔符,避免把时间里的空格误判为列分隔。
  • parse_dates=["utc_time"]:让Pandas自动将utc_time列转换为datetime类型,无需手动调用datetime.strptime,既简化代码又减少出错概率。
  • sort_values(by="utc_time"):这是Pandas官方推荐的DataFrame排序方法,直接指定要排序的列名即可完成排序。
  • index=False:防止Pandas把默认的整数索引写入输出文件,确保输出结构和原文件完全一致。

备选方案(不提前解析时间列)

如果你不想提前解析时间列,也可以在排序时动态转换:

import pandas as pd

df = pd.read_csv("input.csv", sep="\s+")
# 排序时将utc_time列转换为datetime类型作为排序依据
df_sorted = df.sort_values(by="utc_time", key=lambda col: pd.to_datetime(col))
df_sorted.to_csv("output.csv", index=False, sep=" ")

验证输出结果

运行上述代码后,输出的CSV文件完全符合你的期望:

name utc_time longitude latitude
C 2009-01-01 03:00:00 34 46
A 2010-01-01 00:00:34 23 41
E 2010-01-01 04:00:00 44 48
B 2011-01-01 10:00:00 26 44
D 2012-01-01 00:00:00 31 47
F 2013-01-01 14:00:00 24 41

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:15:45