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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 04:54:16