删除列中重复的子字符串,仅返回之间的单词

问题描述 投票:0回答:2

我有以下数据框:

      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
regex python-3.x pandas str-replace
2个回答
2
投票

给出以下数据框:

                                                                     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

0
投票
### 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

中的字符串值之间有空格时,此方法不能解决问题
© www.soinside.com 2019 - 2024. All rights reserved.