如何用Python查找CSV文件中按日期分组的首次与末次记录
解决Python按日期分组提取CSV首尾记录的问题
没问题,我来帮你搞定这个需求!我们可以用两种实用的方式实现:一种依赖Python标准库,适合不想额外安装包的场景;另一种用pandas,代码更简洁高效,处理大文件也更顺手。
方法一:使用Python标准库csv
这个方案完全用Python自带工具,核心思路是先按日期字段把所有记录归类分组,再提取每组的第一条和最后一条(如果组里只有一条记录,就直接保留这条)。
import csv from collections import defaultdict # 创建分组字典,键是日期,值存对应日期的所有记录 date_groups = defaultdict(list) # 读取目标CSV文件(假设文件名为data.csv) with open('data.csv', 'r', newline='') as csvfile: reader = csv.reader(csvfile) for row in reader: # 去掉日期字段的前后空格,避免因空格导致分组错误 date_key = row[1].strip() date_groups[date_key].append(row) # 整理输出结果 output_rows = [] for date, records in date_groups.items(): # 先添加组内第一条记录 output_rows.append(records[0]) # 如果组内记录不止1条,再添加最后一条 if len(records) > 1: output_rows.append(records[-1]) # 把结果写入新CSV(也可以直接打印验证) with open('result.csv', 'w', newline='') as csvfile: writer = csv.writer(csvfile) writer.writerows(output_rows) # 打印结果查看 for row in output_rows: print(', '.join(row))
代码说明:
defaultdict(list)会自动为每个新日期创建空列表,不用手动判断键是否存在,省了不少代码。- 对日期字段做
strip()处理,是因为原数据里日期前后有空格,避免同一个日期因为空格被分成不同组。
方法二:使用pandas库(更简洁)
如果你已经装了pandas,这个方案会非常省心,几行代码就能完成任务:
import pandas as pd # 读取CSV,skipinitialspace=True自动去掉字段前后的空格 df = pd.read_csv('data.csv', header=None, skipinitialspace=True) # 按第2列(索引为1)分组,提取每组的首尾记录,再合并排序 result_df = pd.concat([df.groupby(1).first(), df.groupby(1).last()]).sort_index() # 保存结果到新CSV,或者直接打印 result_df.to_csv('result_pandas.csv', header=False, index=False) # 打印验证结果 print(result_df.to_csv(header=False, index=False))
代码说明:
skipinitialspace=True专门处理原数据里字段前后的空格,确保日期分组准确。groupby(1)按日期列分组,first()和last()直接提取每组的首尾记录,sort_index()保证日期顺序和原文件一致。
两种方法运行后,都会得到你期望的输出:
ABC, 12/2/2017,9:21 AM
ABC, 12/2/2017,6:38 PM
ABC, 12/4/2017,9:21 AM
ABC, 12/4/2017,1:01 PM
ABC, 12/7/2017,11:59 AM
ABC, 12/8/2017,9:33 AM
ABC, 12/8/2017,5:15 PM
内容的提问来源于stack exchange,提问作者user2599263
相关产品推荐
相关产品推荐

