Удалить повторную подстроку в столбце и возвращать только слова между - PullRequest
0 голосов
/ 11 ноября 2019

У меня есть следующий фрейм данных:

      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

Я использовал следующую строку кода, чтобы получить столбец 2:

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

Я хочу удалить все экземпляры ""и поэтому я хочу, чтобы столбец выглядел так:

Column2
.com, Finance
.com, Finance, DO
Finance, ISV, DO, DO Prem
Finance
Consulting, TTY

Ответы [ 2 ]

3 голосов
/ 11 ноября 2019

Учитывая следующий фрейм данных:

                                                                     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 голосов
/ 11 ноября 2019
### 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)

Как указал Трентон МакКинни, его решение лучше. Этот не решает проблему, когда между строковыми значениями в столбце 1

есть пробел
...