Как извлечь только строковый компонент в скобках? - PullRequest
0 голосов
/ 13 октября 2019

Я ищу эффективный способ удаления определенных элементов из столбца данных.

У меня есть такие данные:

year
1 (1991)
10 (1991-2001)
8 (1991-1998)
2 (2000-2002)

, и я хотел быть таким:

year
1991
1991 - 2001
1991 - 1998
2000 - 2002

Я хочу удалить скобки и элементы до и после скобок.

Ответы [ 4 ]

2 голосов
/ 13 октября 2019

С регулярным выражением:

  • Использование pandas.Series.str.extract
    • Регулярное выражение: \((.*)\)
    • Извлекает содержимое между ()
df = pd.DataFrame({'year': ['1 (1991)', '10 (1991-2001)', '8 (1991-1998)', '2 (2000-2002)']})

           year
       1 (1991)
 10 (1991-2001)
  8 (1991-1998)
  2 (2000-2002)

df['year'] = df['year'].str.extract(r'\((.*)\)')

      year
      1991
 1991-2001
 1991-1998
 2000-2002
1 голос
/ 13 октября 2019

Вы можете использовать следующий код

df['year'] = df['year'].str.split('(').str[1].str.strip(')')

выход

    year
0   1991
1   1991-2001
2   1991-1998
3   2000-2002
0 голосов
/ 13 октября 2019

Как насчет:

df['year'] = df['year'].str[1:-1]

Или безопаснее, если ваши данные не всегда начинаются / заканчиваются '()':

# str.strip accepts regex
df['year'] = df['year'].str.strip('(|)')

Вывод:

1          1991
10    1991-2001
8     1991-1998
2     2000-2002
Name: year, dtype: object
0 голосов
/ 13 октября 2019
lines = [
  "year",
  "1 (1991)",
  "10 (1991-2001)",
  "8 (1991-1998)",
  "2 (2000-2002)"
]
formatted_lines = []
for line in lines:
  updated_line = line.split('(') # Splits it into two lines: ["1 ", "1991)"]
  updated_line = updated_line.replace(')') # remove extra parenthesis
  formatted_lines.append(updated_line)
...