Для столбца строк, которые включают (xyz) и [1] в конце некоторых строк, удалите эти символы в Python - PullRequest
0 голосов
/ 26 декабря 2018

Мой столбец df содержит строки с дополнительными символами в круглых скобках и квадратные скобки в конце некоторых строк, для этих строк я хотел бы удалить круглые скобки, квадратные скобки и все символы, содержащиеся в них.

2367            CROSS THREADED 
2368    ALL ABOUT ARBY [5]Res.
2369        EMILIA MEL [5]Res.
2360      DYNA REAVER (NSW)[5]
2362             PARTY MIX [5]

Ожидаемый результат после очистки

2367            CROSS THREADED 
2368            ALL ABOUT ARBY
2369                EMILIA MEL
2360               DYNA REAVER
2362                 PARTY MIX

Ответы [ 2 ]

0 голосов
/ 26 декабря 2018

Это может вам помочь.

def trim(string):
    string = string.split('(')[0]
    string = string.split('[')[0]
    return string.strip()

df['CROSS THREADED'] = df['CROSS THREADED'].apply(lambda row: trim(string=row))
0 голосов
/ 26 декабря 2018

Помогает ли это?

import re
before = "2369        EMILIA MEL [5]Res."
after = re.sub(r"\[.*", "", before).strip()
print(before)
print(after)

Какие отпечатки:

2369        EMILIA MEL [5]Res.
2369        EMILIA MEL

Обновление

С вашим комментарием, что выхотите все после [ или ( удалить:

import re
before = [
    "2369        EMILIA MEL [5]Res.",
    "2360      DYNA REAVER (NSW)[5]"
]
after = [re.sub(r"(\(|\[).*", "", b).strip() for b in before]
print(before)
print(after)

Какие отпечатки:

['2369        EMILIA MEL [5]Res.', '2360      DYNA REAVER (NSW)[5]']
['2369        EMILIA MEL', '2360      DYNA REAVER']

Обновление 2

Вот пример, как использовать его на pandas.DataFrame:

import pandas as pd
import re

df = pd.DataFrame({"before": [
    "CROSS THREADED",
    "ALL ABOUT ARBY [5]Res.",
    "EMILIA MEL [5]Res.",
    "DYNA REAVER (NSW)[5]",
    "PARTY MIX [5]",
]})

df["after"] = df["before"].apply(
    lambda s: re.sub(r"(\(|\[).*", "", s).strip())
print(df)

, который печатает:

                   before           after
0          CROSS THREADED  CROSS THREADED
1  ALL ABOUT ARBY [5]Res.  ALL ABOUT ARBY
2      EMILIA MEL [5]Res.      EMILIA MEL
3    DYNA REAVER (NSW)[5]     DYNA REAVER
4           PARTY MIX [5]       PARTY MIX

Обновление 3

Как отмечается в комментариях, вы также можете использовать pandas.Series.str.replace напрямую:

df["after"] = df["before"].str.replace(r"( )*(\(|\[).*", "")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...