csv 比较两个不同的 Dataframe ,如果匹配,则更改列中的值

h7appiyu  于 2023-03-10  发布在  其他
关注(0)|答案(1)|浏览(117)

首先,我将给予一些背景故事,这样会更有意义。我对编码相当陌生,所以如果我错过了一些明显的答案,请原谅我。
所以,我在一家小公司工作,该公司的库存管理系统非常依赖人工操作。我们有200多台不同类型的设备。我们通过MAC地址来跟踪这些设备(不是序列号,尽管我已经说过这比MAC地址更有意义),而且每个设备都需要手动读取,然后在Excel中将它们标记为“有货”。我决定这需要更多地自动化。到目前为止,我有一个条形码阅读器,可以将MAC扫描到文本文件中。然后我将其转换为CSV,我需要将其与同样转换为CSV的现有库存文件进行比较。如果条形码扫描CSV中的MAC在库存CSV中,我希望将其标记为“有库存”。
这是我目前所拥有的,但每次我试图比较我所拥有的,我都会碰壁。有什么想法吗?

import pandas as pd

    #setting scannedmacs.txt as read_file
read_file = pd.read_csv (r'C:\...\input\scannedmacs.txt')
    #converting read_file to CSV, setting MAC as a header
read_file.to_csv (r'C:\...\output\convertedmacs.csv', index=None , header = ['MAC'])
    #setting convertedmacs.csv to scan_file
scan_file = pd.read_csv(r'C:\...\output\convertedmacs.csv')
    #setting pre-existing InventoryNOC.csv as inv_file 
inv_file = pd.read_csv(r'C:\...\output\InventoryNOC.csv', error_bad_lines=False)
mec1mxoz

mec1mxoz1#

我最终使用了一个掩码来解决我的错误(使用了评论中“import random”提供的其他答案中的示例)。非常感谢他!下面是我的新代码。

# mask using isin
mask = inv_file.MAC.isin(scan_file.MAC.unique())

    # return only the data from inv_file, where inv_file MAC isin scan_file MAC
inv_file[mask]

    # add a column to the inv_file dataframe
inv_file['IN STOCK'] = mask

merged = inv_file.merge(scan_file, on='MAC', how='outer')

merged.to_csv('C:\...\InventoryFinal.csv', index=None)

相关问题