与str.contains和str.contains的逆匹配的另一列的熊猫

时间:2019-06-25 22:31:52

标签: regex python-3.x pandas

我期待在大熊猫中将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的{​​{1}},而如果它在OS Version列中找到字符串/模式VCAD,则将其删除或跳过。

下面是代码:

Aux Site

可能的解决方案:

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

0 个答案:

没有答案