Панды для сопоставления с str.contains и обратным к str.contains для других столбцов - PullRequest
0 голосов
/ 26 июня 2019

Я с нетерпением жду возможности использовать str.contains для одного столбца, а для другого просто инвертировать его ~ str.contains в пандах.

Первый столбец OS Version, где я использую str.contains и это нормально, однако я совместно ищу другой столбец Aux Site, где этот столбец игнорируется или не соответствует строке VCAD.

Сказав это, я не хочу удалять VCAD выбор из столбца Aux Site, чтобы можно было удалить или не подобрать каждую соответствующую строку.

1) Первая, которая в порядке.

df1['OS Version'].str.contains(MATCH_PATT)

2 - втораяОдин с обратным соответствием, как показано ниже

df1[~df1['Aux Site'].str.contains('VCAD')]

Здесь я имею в виду совпадение MATCH_PATT для данного столбца OS Version, тогда как если он находит строку / шаблон VCAD в столбце Aux Site, удалите его или пропуститеit.

Ниже приведен код:

import pandas as pd

MATCH_PATT = "AIX|CentOS|Fedora|RHEL|SunOS|SuSE|Ubuntu|(?<!\?)\?(?!\?)"
COLUMN_NAMES = ['Hostname', 'IP Address', 'Aux Site', 'OS Version']
df1 = pd.read_csv('/home/karn/plura/Test/Python_Panda/CyberArk/host.txt', delimiter = "\t", usecols=COLUMN_NAMES, encoding='cp1252',  dtype='unicode')
df2 = df1[df1['OS Version'].str.contains(MATCH_PATT,  na=False)][['Hostname', 'IP Address', 'Aux Site', 'OS Version']]
df2[['Hostname', 'Aux Site']] = df2[['Hostname', 'Aux Site']].replace({'\*': ''}, regex=True)
df2.to_csv('new_survey_list-1', index=False)

Возможное решение:

df1[(df1['OS Version'].str.contains(MATCH_PATT,  na=False)) & (~df1['Aux Site'].str.contains('VCAD'))] [['Hostname', 'IP Address', 'Aux Site', 'OS Version']]

Я предполагаю, что вышеуказанное решение с оператором & должно работать?

любое решение, совет будет высоко ценится.

Пример данных:

enter image description here

Hostname Aux Site OS Version
vlfox01 VCAD    CentOS 5.5
vlfox02 VCAD    RHEL 7.1
vlfox03 VCAD    RHEL 6.8
vlbrk01 brackn  RHEL 5.8
vlbrk02 brackn  SunOS 5.9
vlbrk03 brackn  RHEL 5.5
vlbrk04 brackn  RHEL 6.3
vlbrk05 brackn  RHEL  5.5

Требуемые данные:

vlbrk01 brackn  RHEL 5.8
vlbrk02 brackn  SunOS 5.9
vlbrk03 brackn  RHEL 5.5
vlbrk04 brackn  RHEL 6.3
vlbrk05 brackn  RHEL  5.5

Редактировать:

пробовал ниже и работал сейчас ..

df2 = df1[(df1['OS Version'].str.contains(MATCH_PATT,  na=False)) & (df1['Aux Site'].str.contains('VCAD')==False)] [['Hostname', 'IP Address', 'Aux Site', 'OS Version']]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...