Pandas,如果检测到符号,如何分离数据帧字符串?

2024-10-06 13:18:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧,如下所示:

表A:

No     Course      Name          
1      BM          GAR\samege    
2      BI          GER\yun       
3      MM          steli                      
4      SC          ilo18yu                     

我希望在检测符号(黑色斜杠)时在Name列拆分字符串。有人对此有想法吗? 下面是我的预期输出 输出:

No     Course      Name           Domain       id
1      BM          GAR\samege     GAR          samege
2      BI          GER\yun        GER          yun
3      MM          steli                       steli
4      SC          ilo18yu                     ilo18yu

Tags: 数据noname符号bmmmscbi
3条回答

使用^{}并按^{}按拆分值的长度设置新列:

s = df['Name'].str.split('\\')
df['domain'] = np.where(s.str.len().eq(1), '', s.str[0])
df['id'] = s.str[-1]
print (df)
   No Course        Name domain       id
0   1     BM  GAR\samege    GAR   samege
1   2     BI     GER\yun    GER      yun
2   3     MM       steli           steli
3   4     SC     ilo18yu         ilo18yu

另一个想法是:

s = df['Name'].str.split('\\').str[::-1]

df[['domain', 'id']] = pd.DataFrame(s.tolist(), index=df.index).iloc[:, ::-1]
print (df)
   No Course        Name domain       id
0   1     BM  GAR\samege    GAR   samege
1   2     BI     GER\yun    GER      yun
2   3     MM       steli   None    steli
3   4     SC     ilo18yu   None  ilo18yu

尝试:

df[['domain', 'id']]= df['Name'].str.split('\\', expand=True)

    No  Course  Name    domain  id
0   1   BM  GAR\samege  GAR     samege
1   2   BI  GER\yun     GER     yun
2   3   MM  steli       steli   None
3   4   SC  ilo18yu     ilo18yu None

编辑:

尝试:

df[['domain', 'id']] = pd.DataFrame([x.split('\\') if len(x.split('\\'))==(2) else ['None', x] for x in df['Name']])

    No  Course  Name        domain  id
0   1   BM      GAR\samege  GAR     samege
1   2   BI      GER\yun     GER     yun
2   3   MM      steli       None    steli
3   4   SC      ilo18yu     None    ilo18yu

我很确定有一个较短的方法解决这个问题,但您可以尝试以下方法:

newdf = pd.DataFrame()
for index,row in df.iterrows():
    if row['Name'].find('\\') != -1:
        splitstr = row['Name'].split('\\')
        domain = splitstr[0]
        id = splitstr[1]
    else:
        domain = np.nan
        id = row['Name']
    
    final = pd.DataFrame([[row['Course'],row['Name'],domain,id]],columns=['Course','Name','Domain','Id'])
    newdf = newdf.append(final)
   

相关问题 更多 >