Я с нетерпением жду возможности использовать 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](https://i.stack.imgur.com/rhaGm.png)
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']]