删除列中重复的子字符串,只删除中间的 return 个单词

Remove repeated substring in column and only return words in between

我有以下数据框:

      Column1                                                                       Column2
0   .com<br><br>Finance<br><br><br><br><br><br><br><br><br><br><br><br>     .comFinance
1   .com<br><br>Finance<br><br><br><br><br>DO<br><br><br><br><br><br><br>   .comFinanceDO
2   <br><br>Finance<br><br><br>ISV<br><br>DO<br>DO Prem<br><br><br><br><br><br>  FinanceISVDODO Prem
3   <br><br>Finance<br><br><br><br><br><br><br><br><br><br><br><br>         Finance
4   <br><br>Finance<br><br><br>TTY<br><br><br><br><br><br><br><br><br>      ConsultingTTY

我曾经使用以下代码行来获取 Column2:

df['Column2'] = df['Column1'].str.replace('<br>', '', regex=True)

我想删除“”的所有实例,因此我希望该列如下所示:

Column2
.com, Finance
.com, Finance, DO
Finance, ISV, DO, DO Prem
Finance
Consulting, TTY
### Replace br with space
df['Column 2'] = df['column 1'].str.replace('<br>', ' ')
### Get rid of spaces before and after the string
df['Column 2'] = df['Column 2'].strip()
### Replace the space with ,
df['Column 2'] = df['Column 2'].str.replace('\s+', ',', regex=True)

正如 TrentonMcKinney 所指出的,他的解决方案更好。当第 1 列

中的字符串值之间存在 space 时,此问题无法解决

给定以下数据框:

                                                                     Column1
         .com<br><br>Finance<br><br><br><br><br><br><br><br><br><br><br><br>
       .com<br><br>Finance<br><br><br><br><br>DO<br><br><br><br><br><br><br>
 <br><br>Finance<br><br><br>ISV<br><br>DO<br>DO Prem<br><br><br><br><br><br>
             <br><br>Finance<br><br><br><br><br><br><br><br><br><br><br><br>
          <br><br>Finance<br><br><br>TTY<br><br><br><br><br><br><br><br><br>
  • df['Column2'] = df['Column1'].str.replace('<br>', ' ', regex=True).str.strip().replace('\s+', ', ', regex=True) 不起作用,因为像 <br>DO Prem<br> 这样的部分将以 DO, Prem 结束,而不是 DO Prem.
  • <br> 上拆分以创建列表,然后使用列表理解删除 '' 空格。
    • 这将保留它们应该在的位置。
  • 使用 (', ').join([...])
  • 将列表值连接回字符串
import pandas as pd

df['Column2'] = df['Column1'].str.split('<br>').apply(lambda x: (', ').join([y for y in x if y != '']))

# output
                                                                     Column1                    Column2
         .com<br><br>Finance<br><br><br><br><br><br><br><br><br><br><br><br>              .com, Finance
       .com<br><br>Finance<br><br><br><br><br>DO<br><br><br><br><br><br><br>          .com, Finance, DO
 <br><br>Finance<br><br><br>ISV<br><br>DO<br>DO Prem<br><br><br><br><br><br>  Finance, ISV, DO, DO Prem
             <br><br>Finance<br><br><br><br><br><br><br><br><br><br><br><br>                    Finance
          <br><br>Finance<br><br><br>TTY<br><br><br><br><br><br><br><br><br>               Finance, TTY