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

如何使用Pandas按日期排序含\N缺失值的DataFrame(日期时间同列)

解决Pandas按日期时间排序并剔除无效行的问题

没问题,这事儿分三步就能搞定,我给你详细说清楚:

第一步:先剔除包含\N的无效行

因为你的第2列(注意Pandas里列索引从0开始,对应代码里的iloc[:, 2])存在\N的垃圾值,我们先把这些行过滤掉。直接用布尔索引就能实现:

# 过滤掉第2列等于\N的行
df_clean = df[df.iloc[:, 2] != r'\N']

这里加r是为了让Python把\N当成原始字符串处理,避免转义出问题。

第二步:把日期时间字符串转成Pandas的datetime类型

原来的日期和时间在同一个单元格里是字符串格式,直接排序会按字符顺序来(简单场景可能没问题,但复杂时间范围下肯定出错),所以必须转成专门的datetime类型:

# 将第2列转换为datetime格式,Pandas会自动识别这种YYYY-MM-DD HH:MM:SS的标准格式
df_clean.iloc[:, 2] = pd.to_datetime(df_clean.iloc[:, 2])

如果你的日期格式比较特殊,还可以给pd.to_datetime传format参数指定格式,比如format='%Y-%m-%d %H:%M:%S',不过你的例子里这个格式是标准的,不用额外设置。

第三步:按转换后的日期时间列排序

现在就可以放心排序了,直接用sort_values方法:

# 按第2列升序排序(早的日期在前),如果要降序加参数ascending=False
df_sorted = df_clean.sort_values(by=df_clean.columns[2])

# 可选:排序后重置索引,让索引从0开始连续
df_sorted = df_sorted.reset_index(drop=True)

完整代码示例

把上面的步骤整合起来,就是这样:

import pandas as pd

# 模拟你的原始DataFrame
data = {
    0: [240, 250, 300, 280],
    1: ['RSOW', 'RSOW', 'RSOW', 'RSOW'],
    2: ['2008-07-11 20:35:00', '2008-06-27 19:10:00', r'\N', '2008-08-01 10:00:00']
}
df = pd.DataFrame(data)

# 步骤1:剔除无效行
df_clean = df[df.iloc[:, 2] != r'\N']

# 步骤2:转换日期时间类型
df_clean.iloc[:, 2] = pd.to_datetime(df_clean.iloc[:, 2])

# 步骤3:排序并重置索引
df_sorted = df_clean.sort_values(by=df_clean.columns[2]).reset_index(drop=True)

print(df_sorted)

运行后输出的结果就是按日期时间从早到晚排序的干净DataFrame啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:29:52