如何从熊猫输出的列中删除某些字符串集

用户294110

我正在尝试从数据帧列中删除某些字符串,只是想知道如何以更好的方式实现这一目标,一种方式是使用多个,replace但我想避免这种情况。

原始数据

ctflex08 | SUCCESS | rc=0 | (stdout) server ntp-tichmond minpoll 4 maxpoll 10\nserver ntp-tichmond-b minpoll 4 maxpoll 10\nserver 127.127.1.0
ctfclx806 | SUCCESS | rc=0 | (stdout) server ntp-mary.example.com
ctfclx802 | SUCCESS | rc=0 | (stdout) server ntp-mary.example.com
ti-goyala | SUCCESS | rc=0 | (stdout) server ntp-tichmond minpoll 4 maxpoll 10\nserver ntp-tichmond-b minpoll 4 maxpoll 10

数据框结构:

import pandas as pd
matchObj = ['(stdout)', 'server', 'minpoll', 'maxpoll' ]

df = pd.read_csv('ntp_server.txt', sep="|" , names=['Linux_Hosts', 'Host_Dist_version'])

df['Host_Dist_version'] =  df['Host_Dist_version'].replace("server", '',regex=True).replace("minpoll", '',regex=True)
print(df)

电流输出:

                      Linux_Hosts                                  Host_Dist_version
ctflex08      SUCCESS        rc=0    (stdout)  ntp-tichmond  4 maxpoll 10\n ntp-ti...
ctfclx806     SUCCESS        rc=0                      (stdout)  ntp-mary.example.com
ctfclx802     SUCCESS        rc=0                      (stdout)  ntp-mary.example.com
ti-goyala     SUCCESS        rc=0    (stdout)  ntp-tichmond  4 maxpoll 10\n ntp-ti...

预期产量:

Linux_Hosts               Host_Dist_version
ctflex08                  ntp-tichmond  ntp-tichmond-b
ctfclx806                 ntp-mary.example.com
ctfclx802                 ntp-mary.example.com
ti-goyala                 ntp-tichmond ntp-tichmond-b

有没有一种有效的方法来仅选择所需的字符串并其余部分删除或掩盖它们,例如,['ntp-mary', 'ntp-tichmond', 'ntp-tichmond-b']仅查看这些列表值并仅选择它们并将其余部分保留。

在替换一些特殊字符和字符串时,它不起作用..

SUCCESSS视为关键字,\n也不会被删除。

马诺

查看更新的代码:

import pandas as pd
df = pd.read_csv('ntp_server.txt', sep="|" , names=['Linux_Hosts','Status','RC','Host_Dist_version'])
pattern = r'(ntp+[^\s]+)'
df['Host_Dist_version'] = df['Host_Dist_version'].str.findall(pattern).str.join(' ')
df = df.drop(['Status','RC'], axis =1)
print(df)

结果输出:

  Linux_Hosts            Host_Dist_version
0   ctflex08   ntp-tichmond ntp-tichmond-b
1  ctfclx806          ntp-mary.example.com
2  ctfclx802          ntp-mary.example.com
3  ti-goyala   ntp-tichmond ntp-tichmond-b

说明:pattern是正则表达式,它匹配包含单词的子字符串,'ntp'并捕获所有内容,直到下一个空格为止(我认为这是必需的),如果您不想在.随后使用(ntp+[^\s.]+)正则表达式之后捕获任何内容

我还创建了一个具有4列的DataFrame,因为分隔符'|'表明文本文件中有4列,如果不需要它们,可以稍后删除'Status'和'RC',希望这会有所帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章