Объединение 2 CSV-файлов на основе сопоставления значений в общем столбце и запись объединенного нового набора в новый CSV-файл - PullRequest
0 голосов
/ 10 июля 2019

Я пытаюсь использовать 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» может содержать имена систем в верхнем и нижнем регистре.Кроме того, «имя_компьютера» может включать имя домена системы (то есть «company.com»).

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

Я пытаюсь изменить значения столбца «Is_Patched» в каждой строке на «Да», если «Computer_Name» совпадает в обоих CSV-файлах для этой строки.

Вот то, что у меня есть, и похоже, что оно работает:

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')

Однако я не могу понять, как вставить значение «Да» в столбец «Is_patched», когда в обоих случаях есть совпадениеCSV-файлы для «Computer_Name» для этой строки и запись нового набора Pandas в новый CSV-файл.

Я надеюсь, что кто-то может дать мне хорошее руководство о том, как решить эту проблему.Заранее спасибо,

1 Ответ

0 голосов
/ 10 июля 2019

Сначала мы разбиваем ваш столбец computer_name во втором кадре данных на . и сохраняем первую часть.

Затем мы проверяем с помощью Series.isin, присутствует ли имя_компьютера из второго кадра данных в первом кадре данных.

Мы используем 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
...