如何比较CSV两列日期并筛选列1日期早于列2的行
实现方案
一、命令行简便实现
推荐使用结构化文本处理工具Miller(mlr),无需自己处理CSV分隔符、时间拆分逻辑,一行命令即可完成:
- 先安装Miller:
- Debian/Ubuntu:
sudo apt install miller - macOS:
brew install miller - Windows:可直接下载官方二进制包
- Debian/Ubuntu:
- 执行筛选命令:
mlr --csv filter 'strptime($第一列,"%m/%d/%Y %I:%M:%S %p") < strptime($第二列,"%m/%d/%Y %I:%M:%S %p")' 输入文件.csv > 输出文件.csv
说明:如果你的CSV列名不是
第一列、第二列,替换成实际列名即可。命令会自动保留表头,仅输出第一列时间早于第二列的行,完全匹配你的示例要求。
二、Python脚本实现
如果不想安装额外命令行工具,用Python实现也非常简单,无需手动拆分时间维度、处理AM/PM逻辑,自带的时间库会自动处理所有比较规则。
方案1:使用pandas(代码最简洁)
- 先安装依赖:
pip install pandas - 运行脚本:
import pandas as pd # 读取原始CSV df = pd.read_csv("你的输入文件.csv") # 转换两列为标准时间类型,自动识别AM/PM time_format = "%m/%d/%Y %I:%M:%S %p" df["第一列"] = pd.to_datetime(df["第一列"], format=time_format) df["第二列"] = pd.to_datetime(df["第二列"], format=time_format) # 筛选符合条件的行 result_df = df[df["第一列"] < df["第二列"]] # 导出结果 result_df.to_csv("你的输出文件.csv", index=False)
方案2:仅用Python标准库(无需安装第三方依赖)
import csv from datetime import datetime time_format = "%m/%d/%Y %I:%M:%S %p" with open("你的输入文件.csv", "r", encoding="utf-8") as f_in, \ open("你的输出文件.csv", "w", encoding="utf-8", newline="") as f_out: reader = csv.DictReader(f_in) writer = csv.DictWriter(f_out, fieldnames=reader.fieldnames) writer.writeheader() for row in reader: t1 = datetime.strptime(row["第一列"], time_format) t2 = datetime.strptime(row["第二列"], time_format) if t1 < t2: writer.writerow(row)
内容的提问来源于stack exchange,提问作者samster
相关产品推荐
相关产品推荐

