Соедините две строки и избавьтесь от регулярного выражения списка - PullRequest
1 голос
/ 03 апреля 2020

У меня есть кадр данных, содержащий 2 части строки в столбце B, извлеченный с помощью регулярного выражения из столбца A:

df['B'] = df['A'].str.findall(r'([S][\d]|[V][\d]{3})')

                       A                                     B
1   R13_IR_T20I1E7_PP3_S1_N002_V087_1785984_12593       ['S1', 'V087']
2   R13_IR_T20I1E7_PP3_S1_N003_V023_5896589_15105       ['S1', 'V023']
3   R13_IR_T20I1E7_PP3_S1_N004_V155_2541236_11033       ['S1', 'V155']

Я хотел бы избавиться от списков в столбце B и объединить две строки внутри с помощью '_'

Результат будет выглядеть следующим образом:

                       A                            B
1   R13_IR_T20I1E7_PP3_S1_N002_V087_1785984_12593   S1_V087
2   R13_IR_T20I1E7_PP3_S1_N003_V023_5896589_15105   S1_V023
3   R13_IR_T20I1E7_PP3_S1_N004_V155_2541236_11033   S1_V155

Еще одна вещь, которую я хочу извлечь с помощью регулярного выражения из столбца A, это та часть строки, которая выглядит следующим образом:

I have no idea how the regex would look!

                A                                      C
1   R13_IR_T20I1E7_PP3_S1_N002_V087_1785984_12593   S1_1785984
2   R13_IR_T20I1E7_PP3_S1_N003_V023_5896589_15105   S1_5896589
3   R13_IR_T20I1E7_PP3_S1_N004_V155_2541236_11033   S1_2541236 

Извините за двойной вопрос, я был бы признателен за вашу помощь!

Ответы [ 2 ]

4 голосов
/ 03 апреля 2020

Использование: str.join("_")

Пример:

df['B'] = df['B'].str.join("_") 
print(df['B'])

Выход:

0    S1_V087
1    S1_V023
2    S1_V155
Name: B, dtype: object

MoreInfo


Для извлечения содержимого с помощью регулярных выражений

df['C'] = "S1_" + df['A'].str.extract("(\d+)_\d+$")  
print(df['C'])

Вывод:

0    S1_1785984
1    S1_5896589
2    S1_2541236
Name: C, dtype: object
2 голосов
/ 03 апреля 2020

Во-первых, вам просто нужно применить '_'. Присоединиться к B:

df['B'] = df['B'].apply('_'.join)

Во-вторых, вам не нужно регулярное выражение, просто разделите на '_' и получите нужные значения, а затем присоединиться снова:

df['C'] = df['A'].apply(lambda x: '_'.join([x.split('_')[4], x.split('_')[-2]]))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...