Извлечь конкретную строку, которая появляется в нескольких строках в ячейках панд - PullRequest
0 голосов
/ 29 ноября 2018

Мне нужно извлечь строку, которая начинается с «Year» и заканчивается на «\ n», но для каждой строки, которая появляется в ячейке во фрейме данных Pandas.Кроме того, я хочу удалить \ n в конце ячейки.

Это фрейм данных:

df

  Column1
  not_important1\nnot_important2\nE012-855 Year-1972\nE012-856 Year-1983\nnot_important3\nE012-857 Year-1977\nnot_important4\nnot_important5\nE012-858 Year-2012\n
  not_important6\nnot_important7\nE013-200 Year-1982\nE013-201 Year-1984\nnot_important8\nE013-202 Year-1987\n
  not_important9\nnot_important10\nE014-652 Year-1988\nE014-653 Year-1980\nnot_important11\nE014-654 Year-1989\n

Вот что я хочу получить:

df

  Column1
  Year-1972\nYear-1983\nYear-1977\nYear-2012
  Year-1982\nYear-1984\nYear-1987
  Year-1988\nYear-1980\nYear-1989

Как это сделать?

1 Ответ

0 голосов
/ 29 ноября 2018

Вы можете использовать findall с этим регулярным выражением r'Year.*?\\n', чтобы перехватить подстроки.Затем создайте строку из списка найденных элементов с помощью ''.join, а затем удалите последний \n с помощью [:-2]:

import re
df['Column1'] = df['Column1'].apply(lambda x: ''.join(re.findall('Year.*?\\n', x))[:-2])

Или, если после 4 цифр года всегда есть\n, вы можете сделать так:

df['Column1'] = df['Column1'].apply(lambda x: '\n'.join(re.findall('Year-\d\d\d\d', x)))
...