如何用Python对比两日Excel/CSV文件,识别Stack的新增与删除记录
问题:识别CSV文件中新增与删除的Stack记录
有两个列名完全一致的三列CSV文件:昨日数据(08102022.csv)、今日数据(08112022.csv)。需要仅基于Stack Name列,区分出今日新增(昨日无、今日有)和已删除(昨日有、今日无)的Stack记录。
当前使用的pandas代码只能找出非重复行,无法区分新增/删除类型:
newstack_additions = pd.concat([dfprevious,dftoday]).drop_duplicates(subset = ['Stack Name'], keep=False) print(newstack_additions) newstack_additions["Stack Change Type"] = "New Stack" newstack_additions['Last Modified'] = pd.to_datetime(newstack_additions['Last Modified'], format= '%m/%d/%Y-%H:%M:%S')
昨日文件共3144条数据,今日文件共3145条数据,期望输出带Stack Change Type标识的结果(例如新增记录),同时输出已删除的Stack记录。
解决方案:分步区分新增与删除记录
1. 读取数据源
首先读取两个CSV文件的数据:
import pandas as pd # 读取昨日和今日的CSV文件 df_prev = pd.read_csv('08102022.csv') df_today = pd.read_csv('08112022.csv')
2. 对比Stack Name集合,确定变更类型
通过集合运算直接找出新增和删除的Stack名称:
# 提取两个数据集的Stack Name集合 prev_stack_names = set(df_prev['Stack Name']) today_stack_names = set(df_today['Stack Name']) # 计算今日新增的Stack(今日存在、昨日不存在) new_stack_names = today_stack_names - prev_stack_names # 计算已删除的Stack(昨日存在、今日不存在) deleted_stack_names = prev_stack_names - today_stack_names
3. 筛选记录并添加类型标识
基于上述名称集合,筛选对应记录并打上变更类型标签:
# 筛选今日新增的记录,添加类型标识 df_new_stacks = df_today[df_today['Stack Name'].isin(new_stack_names)].copy() df_new_stacks['Stack Change Type'] = 'New Stack' # 筛选已删除的记录,添加类型标识 df_deleted_stacks = df_prev[df_prev['Stack Name'].isin(deleted_stack_names)].copy() df_deleted_stacks['Stack Change Type'] = 'Deleted Stack' # 统一处理Last Modified列的时间格式 df_new_stacks['Last Modified'] = pd.to_datetime(df_new_stacks['Last Modified'], format='%m/%d/%Y-%H:%M:%S') df_deleted_stacks['Last Modified'] = pd.to_datetime(df_deleted_stacks['Last Modified'], format='%m/%d/%Y-%H:%M:%S')
4. 查看或输出结果
可以分别查看新增、删除记录,也可以合并输出:
# 查看今日新增记录 print("今日新增的Stack记录:") print(df_new_stacks) # 查看已删除记录 print("\n已删除的Stack记录:") print(df_deleted_stacks) # 合并所有变更记录(可选) df_all_changes = pd.concat([df_new_stacks, df_deleted_stacks], ignore_index=True) print("\n所有Stack变更记录:") print(df_all_changes)
这种方法通过集合对比精准区分了新增和删除的记录,解决了原代码无法判断变更类型的问题,最终输出的结果会明确标记每条记录的变更类型。
内容的提问来源于stack exchange,提问作者n44ri
相关产品推荐
相关产品推荐

