根据公共列上的匹配值合并 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
有条件地填写Yes
或No
当有匹配时:
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
我正在尝试使用 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
有条件地填写Yes
或No
当有匹配时:
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