文件更新后记录变化的处理方式

文章讲述了如何利用pandas和numpy库读取CSV文件,通过ppid列对比新旧数据,检测文件中数据的新增、修改和删除,并将结果保存到新的CSV文件中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文件更新后记录变化的处理方式

背景:文件有3列数据,通过一列名为ppid的列可以唯一确定行数据,现在这个文件里的数据发生了变化,有些行数据改变了,有些删除了,也有新增数据行,现在需要将他们行的变化标出,是新建、修改还是删除。

数据如下:

old.csv数据为:

ppidcol1col2
LK-001AB
LK-002CD
LK-003EF

new.csv数据为:

ppidcol1col2
LK-001AB
LK-002CG
LK-99NB

需要输出的结果为:

ppidcol1col2change
LK-001AB
LK-002CGmodify
LK-003EFdeleted
LK-99NBnew

使用pandas和numpy库来读取和处理CSV文件

import pandas as pd
import numpy as np

# 读取旧文件和新文件
old_df = pd.read_csv('tmp/old.csv')
new_df = pd.read_csv('tmp/new.csv')

# 创建一个空的结果DataFrame
result_df = pd.DataFrame(columns=['ppid', 'col1', 'col2', 'change'])

# 处理修改和新增的行
for _, row_new in new_df.iterrows():
    # 根据ppid查找旧数据
    row_old = old_df.loc[old_df['ppid'] == row_new['ppid']]
    if len(row_old) == 0:
        # 如果旧数据不存在,则添加一行新数据
        result_df = result_df.append(
            {'ppid': row_new['ppid'], 'col1': row_new['col1'], 'col2': row_new['col2'], 'change': 'new'},
            ignore_index=True)
    else:
        # 如果旧数据存在,则比较新旧数据
        if row_new['col1'] != row_old['col1'].values[0] or row_new['col2'] != row_old['col2'].values[0]:
            result_df = result_df.append(
                {'ppid': row_new['ppid'], 'col1': row_new['col1'], 'col2': row_new['col2'], 'change': 'modify'},
                ignore_index=True)
        # 数据无变化
        else:
            result_df = result_df.append(
                {'ppid': row_new['ppid'], 'col1': row_new['col1'], 'col2': row_new['col2'], 'change': ''},
                ignore_index=True)

# 处理删除的行
for _, row_old in old_df.iterrows():
    # 根据ppid查找新数据
    row_new = new_df.loc[new_df['ppid'] == row_old['ppid']]
    if len(row_new) == 0:
        # 如果新数据不存在,则添加一行删除的数据
        result_df = result_df.append(
            {'ppid': row_old['ppid'], 'col1': row_old['col1'], 'col2': row_old['col2'], 'change': 'deleted'},
            ignore_index=True)

# 保存结果到新文件中
result_df.to_csv('tmp/result.csv', index=False)

在pandas库中,iterrows()是一个用于迭代DataFrame行的函数。它返回一个迭代器,该迭代器可以依次返回DataFrame中每一行的索引和数据。具体来说,iterrows()函数会遍历DataFrame中的每一行,对于每一行,它会返回一个元组,其中第一个元素表示该行的索引,第二个元素表示该行的数据。

在pandas库中,loc是一个用于选择DataFrame行和列的函数。它可以根据行和列的标签来选择数据,并返回一个新的DataFrame。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值