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

如何对比两个DataFrame匹配MAC地址并更新库存状态?

库存MAC匹配标记实现方案

需求背景

我是编程新手,所在小企业采用手动库存管理,通过MAC地址追踪200+设备,需手动标记“In Stock”。现用扫码器将MAC存入文本转CSV,需与现有库存CSV对比,匹配的MAC标记为“In Stock”,已完成文件读取代码,求后续实现方案。

现有代码

import pandas as pd

# 读取扫码生成的MAC文本文件
read_file = pd.read_csv (r'C:\...\input\scannedmacs.txt')
# 转成带MAC表头的CSV文件
read_file.to_csv (r'C:\...\output\convertedmacs.csv', index=None , header = ['MAC'])
# 读取转换后的扫码MAC CSV
scan_file = pd.read_csv(r'C:\...\output\convertedmacs.csv')
# 读取现有库存CSV
inv_file = pd.read_csv(r'C:\...\output\InventoryNOC.csv', error_bad_lines=False)

后续实现步骤

1. 统一MAC格式(关键:避免因格式差异匹配失败)

MAC地址经常出现大小写、分隔符(冒号/短横线/无分隔)不一致的情况,先统一成标准格式:

# 定义MAC格式化函数:清理非十六进制字符,转小写,按每两位加冒号
def format_mac(mac_str):
    # 只保留字母数字,转小写
    cleaned_mac = ''.join([c.lower() for c in mac_str if c.isalnum()])
    # 每两位插入冒号
    return ':'.join([cleaned_mac[i:i+2] for i in range(0, 12, 2)])

# 对扫码文件和库存文件的MAC列统一格式化
scan_file['MAC'] = scan_file['MAC'].apply(format_mac)
inv_file['MAC'] = inv_file['MAC'].apply(format_mac)

2. 标记匹配的设备状态

先确认库存表有状态列,没有就新增;然后用isin()判断MAC是否在扫码列表中,标记为“In Stock”:

# 如果库存表没有Status列,新增该列
if 'Status' not in inv_file.columns:
    inv_file['Status'] = ''

# 把扫码到的MAC对应的设备标记为"In Stock"
inv_file.loc[inv_file['MAC'].isin(scan_file['MAC']), 'Status'] = 'In Stock'

# 可选:如果需要标记未扫码到的设备为"Out of Stock",取消下面注释
# inv_file.loc[~inv_file['MAC'].isin(scan_file['MAC']), 'Status'] = 'Out of Stock'

3. 保存更新后的库存文件

把修改后的库存表保存,建议先存为新文件避免覆盖原数据,测试没问题再替换原文件:

# 保存为新的库存文件(推荐)
inv_file.to_csv(r'C:\...\output\UpdatedInventoryNOC.csv', index=False)

# 如果确认没问题,也可以直接覆盖原库存文件
# inv_file.to_csv(r'C:\...\output\InventoryNOC.csv', index=False)

4. 优化:跳过中间CSV转换(可选)

你当前代码把txt转成CSV再读取,其实可以直接读取txt文件,省去中间步骤,提升效率:

# 直接读取扫码生成的txt文件,指定列名为MAC,跳过转CSV步骤
scan_file = pd.read_csv(r'C:\...\input\scannedmacs.txt', header=None, names=['MAC'])
# 后续的格式化、标记步骤和上面一致

内容的提问来源于stack exchange,提问作者Interior Goblin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 08:52:41