根据公共列上的匹配值合并 2 个 CSV 文件,并将组合的新集合写入新的 CSV 文件

Merging 2 CSV files based on matching values on common column and writing the combined new set into a new CSV file

我正在尝试使用 Pandas 合并两个基于 CSV 文件的内容 在两个 CSV 文件中都存在的一列上。

第一个 CSV 文件: 该文件包含500多条记录,该文件的格式为:

Computer_Name   Purchase_Date        Vendor           Is_Virtual      Is_Patched
--------------------------------------------------------------------------------
Computer_1      4-11-2018           Dell                 NaN            NaN
Computer_2      5-5-2016            HP                   Yes            NaN
Computer_3      1-05-2015           IBM                  NaN            NaN

第二个 CSV: 此文件包含一列,可能包含较少的记录。 "Computer_Name" 列可能包含大小写混合格式的系统名称。此外,"Computer_Name" 可能包含系统的域名(即 "company.com")。

Computer_Name
--------------------
Computer_1.company.com
Computer_3
Computer_5.company.com

如果 "Computer_Name" 在该行的两个 CSV 文件中匹配,我正在尝试将每一行中 "Is_Patched" 列的值更改为 "Yes"。

以下是我目前所拥有的并且似乎有效:

import pandas as pd
import csv
import sys

pd.set_option('display.max_columns', None)

assets = pd.read_csv(r"C:\AssetsFile.csv")          #First CSV file
references = pd.read_csv(r"C:\ReferenceFile.csv")   #Second CSV file

assets['Computer_Name'] = assets['Computer_Name'].str.lower()

assets['Computer_Name'] = assets['Computer_Name'].str.split('.').str[0]

references['Computer_Name'] = references['Computer_Name'].str.lower()

references['Computer_Name'] = references['Computer_Name'].str.split('.').str[0]

assets.merge(references, on='Computer_Name')

但是,当 "Computer_Name" 的两个 CSV 文件中匹配该行时,我不知道如何将值 "Yes" 插入 "Is_patched" 列 并将新的 Pandas 集写入新的 CSV 文件。

我希望有人能给我一个很好的指导,告诉我如何解决这个问题。 提前谢谢你,

我们首先将第二个数据框中的 computer_name 列拆分 . 并保留第一部分。

然后我们用 Series.isin 检查第二个数据帧中的 computer_name 是否存在于第一个数据帧中。

我们使用np.where有条件地填写YesNo当有匹配时:

s = references['Computer_Name'].str.split('.').str[0]

assets['Is_Patched'] = np.where(assets['Computer_Name'].isin(s), 'Yes', 'No')
  Computer_Name Purchase_Date Vendor Is_Virtual Is_Patched
0    Computer_1     4-11-2018   Dell        NaN        Yes
1    Computer_2      5-5-2016     HP        Yes         No
2    Computer_3     1-05-2015    IBM        NaN        Yes