我有一个pandas Dataframe。其中我有一个名为“简短描述”的列。 我已经过滤了这一列并列入了一个列表。
我在df中有2500个描述。我的描述如下:
- 摘要:SD1:数据库saptempdb中的空闲日志空间不足:2。99%日期:01/01/2017严重性:重要资源
- 摘要:SD1:数据库saptempdb中的空闲数据空间不足:2。99%日期:01/01/2017严重性:主要结果
- 摘要:数据库FSPRO使用了日志空间:95。00%日期:01/07/2017严重性:主要ResourceId:svf
- 无法从GUI
连接BD1和BQ1
我已完成字符串拆分并保存在列表中
#### Splitting the sentences ####
df['sentsplit'] = df["Short Description"].str.split(" ")
sent = df['sentsplit'].tolist()
[[u'Summary:',u'SD1:',u'Low',u'free',u'LOG',你的空间',u'in',u'database',u'saptempdb :','u'2.99%',u'Date:',u'01 / 01/2017',u'Severity:',u'Major',u'Reso'],[u'Summary:',你' SD1:',u'Low',u'free',u'DATA',你的空间',u'in',你的数据库',u'saptempdb:',u'2.99%',u'Date: ',u'01 / 01/2017',u'Severity:','u'Major',u'Res']
我需要提取我的数据库名称并对其进行分组。例如:在第一个描述中 - saptempdb是一个数据库,第二个也是saptempdb。我需要对这些语句进行分组。(基本上需要集群基于相同数据库的描述)。
Summary: SD1: Low free LOG space in database saptempdb: 2.99% Date: 01/01/2017 Severity: Major Reso SAPTEMPDB
Summary: SD1: Low free DATA space in database saptempdb: 2.99% Date: 01/01/2017 Severity: Major Res SAPTEMPDB
Summary: Database FSPRO has used log space: 95.00% Date: 01/07/2017 Severity: Major ResourceId: svf FSPRO
Unable to connect BD1 and BQ1 from GUI Miscellaneous
我试图使用模式
进行exytractimport re
ip = re.findall( r'[0-9]+(?:\.[0-9]+){3}', sent )
print ip
也试过这个。它始终不遵循这种模式。
host_or_ip_re = re.compile(r'database (\d+:\d+:\d+:\d+)|database (\w+)|Sys=([^, ]+),')
for line in log:
m = host_or_ip_re.searc( line )
if m:
print m.groups()
答案 0 :(得分:0)
我从您的描述中理解的是,您希望使用相同的数据库名称对所有描述进行分组。对吗?
为此,如果您有一组预定义的数据库名称,则可以创建数据库列表,如db = ['saptempdb','FSPRO','BD1','BQ1']并尝试匹配这些字符串该列表包含数据框而不是对其进行分组。
您正在尝试 - host_or_ip_re = re.compile(r'database (\d+:\d+:\d+:\d+)|database (\w+)|Sys=([^, ]+),')
对于“无法从GUI连接BD1和BQ1”不起作用,因为此语句中没有数据库字符串。
答案 1 :(得分:0)
使用提供的输入的变体:
l = ['Summary: SD1: Low free LOG space in database saptempdb: 2.99% Date: 01/01/2017 Severity: Major Reso ',
'Summary: Database FSPRO has used log space: 95.00% Date: 01/07/2017 Severity: Major ResourceId: svf ',
'Summary: SD1: Low free DATA space in database saptempdb: 2.99% Date: 01/01/2017 Severity: Major Res ',
'Unable to connect BD1 and BQ1 from GUI']
我创建了一个数据框并添加了一个空列
import pandas as pd
frame = pd.DataFrame({'logs': l})
frame['names'] = ''
然后我创建正则表达式以查找数据库名称并使用它来填充names
列:
import re
pattern = re.compile(r'[dD]atabase (\w+)')
for _, line in frame.iterrows():
name = pattern.findall(line['logs'])
if name:
line['names'] = name[0]
else:
line['names'] = 'Miscellaneous'
最后,我按names
列
frame.sort_values(by='names', inplace=True)
# frame.sort_values(by='names', inplace=False) returns a sorted copy of f
并获取
logs names
1 Summary: Database FSPRO has used log space: 95... FSPRO
3 Unable to connect BD1 and BQ1 from GUI Miscellaneous
0 Summary: SD1: Low free LOG space in database s... saptempdb
2 Summary: SD1: Low free DATA space in database ... saptempdb