Pandas 在数据框列表列中,执行str.split(';\[a-zA-Z]';,1)。str[0]。str.strip()AttributeError:';列表';对象没有属性';str';
我尝试了以下列,它使用了单个元素。但是上面给了我一个错误Pandas 在数据框列表列中,执行str.split(';\[a-zA-Z]';,1)。str[0]。str.strip()AttributeError:';列表';对象没有属性';str';,pandas,Pandas,我尝试了以下列,它使用了单个元素。但是上面给了我一个错误 data = { 'IDs': ['G1','G2','G3','G4','G5','G6'], 'hostname': [[ 'Gp.xyz.com', 'Gp.wxyz.com'],['GSS'],['CS.xyz.com', 'CS_B.wxyz.com'],['GS191'], ['C_P.g.com'][10.10.1.10]] } df = pd.DataF
data = {
'IDs': ['G1','G2','G3','G4','G5','G6'],
'hostname': [[ 'Gp.xyz.com', 'Gp.wxyz.com'],['GSS'],['CS.xyz.com', 'CS_B.wxyz.com'],['GS191'], ['C_P.g.com'][10.10.1.10]]
}
df = pd.DataFrame.from_dict(data)
df
Out[107]:
IDs hostname
0 G1 [Gp.xyz.com, Gp.wxyz.com]
1 G2 [GSS]
2 G3 [CS.xyz.com, CS_B.wxyz.com]
3 G4 [GS191]
4 G5 [C_P.g.com]
5 g6 [10.10.1.10]
df['hostname'].apply(lambda el: [ x.str.split('\.[a-zA-Z]', 1).str[0].str.strip() for x in el])
我们先进行
分解
,然后进行拆分
data1 = {
'IDs': ['G1','G2','G3','G4','G5'],
'hostname': [[ 'Gp', 'Gp'],['GSS'],['CS', 'CS_B'],['GS191'], ['C_P']]
}
df1 = pd.DataFrame.from_dict(data)
df1
Out[108]:
IDs hostname
0 G1 [Gp, Gp]
1 G2 [GSS]
2 G3 [CS, CS_B]
3 G4 [GS191]
4 G5 [C_P]
5 G6 [10.10.1.10]
我们先进行
分解
,然后进行拆分
data1 = {
'IDs': ['G1','G2','G3','G4','G5'],
'hostname': [[ 'Gp', 'Gp'],['GSS'],['CS', 'CS_B'],['GS191'], ['C_P']]
}
df1 = pd.DataFrame.from_dict(data)
df1
Out[108]:
IDs hostname
0 G1 [Gp, Gp]
1 G2 [GSS]
2 G3 [CS, CS_B]
3 G4 [GS191]
4 G5 [C_P]
5 G6 [10.10.1.10]
对于错误,由于使用了
apply
,因此每个x
都是python字符串,例如'Gp.xyz.com'
。因此它没有.str
访问权限。您可以只执行x.split('.')
,但我怀疑您是否可以在那里使用正则表达式split。解决办法是
s=df.explode('hostname')
s['hostname']=s.hostname.str.split('\.[a-zA-Z]', 1).str[0]
s.groupby(level=0).agg({'IDs':'first','hostname':list})
IDs hostname
0 G1 [Gp, Gp]
1 G2 [GSS]
2 G3 [CS, CS_B]
3 G4 [GS191]
4 G5 [C_P]
Ben解决方案的另一个修改是使用extract
,保存一些.str
访问:
df['hostname'].apply(lambda el: [x.split('.')[0] for x in el])
输出:
s=df.explode('hostname')
s['hostname']=s.hostname.str.extract('^([^\.]*)')
s.groupby('IDs').agg(list)
对于错误,由于使用了
apply
,因此每个x
都是python字符串,例如'Gp.xyz.com'
。因此它没有.str
访问权限。您可以只执行x.split('.')
,但我怀疑您是否可以在那里使用正则表达式split。解决办法是
s=df.explode('hostname')
s['hostname']=s.hostname.str.split('\.[a-zA-Z]', 1).str[0]
s.groupby(level=0).agg({'IDs':'first','hostname':list})
IDs hostname
0 G1 [Gp, Gp]
1 G2 [GSS]
2 G3 [CS, CS_B]
3 G4 [GS191]
4 G5 [C_P]
Ben解决方案的另一个修改是使用extract
,保存一些.str
访问:
df['hostname'].apply(lambda el: [x.split('.')[0] for x in el])
输出:
s=df.explode('hostname')
s['hostname']=s.hostname.str.extract('^([^\.]*)')
s.groupby('IDs').agg(list)
让我试试这个。当我在我的实际应用中尝试时,我得到了一些减少的行dataframe@vinsentparamananthamv检查更新
s.groupby(level=0).agg({'IDs':'first','hostname':list})
,减少行的原因是IDs不是唯一的,让我试试这个。当我在我的实际应用中尝试时,我得到了一些减少的行dataframe@vinsentparamananthamv检查更新s.groupby(level=0).agg({'IDs':'first','hostname':list})
,减少行的原因是IDs不是唯一的,在Ben的回答中,我的数据帧数量减少了。。让我试试x.split('.')。应用(lambda el:[x.split('\.[a-zA-Z]'))[0]表示el中的x),AttributeError:'list'对象没有属性'split'@vinsentparamanantham,只需使用。
,如答案中所述。请参阅更新。很抱歉,我的主机名中也有ip,如10.101.10.1,这就是我仅使用字母表的原因。.df['hostname'].apply(lambda el:[x.split('.')[0]表示x in el])根据Ben的回答,我的ip被截断为5[10],我的数据帧计数减少了。。让我试试x.split('.')。应用(lambda el:[x.split('\.[a-zA-Z]'))[0]表示el中的x),AttributeError:'list'对象没有属性'split'@vinsentparamanantham,只需使用。
,如答案中所述。请参阅更新。很抱歉,我的主机名中也有ip,如10.101.10.1,这就是我仅使用字母表的原因。.df['hostname']。应用(lambda el:[x.split('.')[0]表示el中的x])我的ip被截断为5[10]