Извлечение последнего числа в кадре данных со строками в Python - PullRequest
0 голосов
/ 01 марта 2019

У меня есть датафрейм от pandas.Я не уверен, как начать извлекать информацию.

Данные в столбце таковы:

->Company A 100->Company B 60->Company C 80-> Company D
->Company A 100->Company B 53.1->Company C 82.2->Company D 100-> Company G
->Company A 100->Company B 23-> Company D

и т. Д.

Информация о компанияхне важны, только последний номер в каждом пункте.

Я хочу извлечь число перед последним -> и вставить его в другой столбец.

Например, извлечь 80, 100 и 23 соответственно.

80
100
23

У меня есть это

import re
text = '->Company A 100->Company B 60->Company C 80-> Company D'
re.findall(r'\d+', text)[-1]

, которое дает правильный вывод '80'

Но когда я делаю это для df

re.findall(r'\d+', df['ColumnName'])[-1]

Я получаю: TypeError: ожидаемая строка или байтовоподобный объект

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

Используйте регулярное выражение для получения чисел с плавающей запятой или целых чисел с findall и получения последних значений путем индексации:

df['num'] = df['col'].str.findall(r'([-+]?\d*\.\d+|\d+)').str[-1]
print (df)


                                                 col  num
0  -> Company A 100->Company B 60->Company C 80->...   80
1  -> Company A 100->Company B 53.1->Company C 82...  100
2         -> Company A 100->Company B 23-> Company D   23
0 голосов
/ 01 марта 2019

Вы можете попробовать следующее, если вы хотите последний номер строки:

df['num'] = df['text'].str[::-1].str.extract('(\d+)')
df['num'] = df['num'].str[::-1]
df

           text                                         num
0   -> Company A 100->Company B 60->Company C 80->...   80
1   -> Company A 100->Company B 53.1->Company C 82...   100
2   -> Company A 100->Company B 23-> Company D          23

Вы также можете попробовать это, если вам нужен только номер перед последним '->':

df['num'] = df['text'].str.split('->').str[-2].str.extract('(\d+)')

           text                                         num
0   -> Company A 100->Company B 60->Company C 80->...   80
1   -> Company A 100->Company B 53.1->Company C 82...   100
2   -> Company A 100->Company B 23-> Company D          23

Если вы хотите использовать числа с плавающей запятой перед последним '->':

df['text'].str.split('->').str[-2].str.extract('(\d+(?:\.\d+)?)')

Изменение в регулярном выражении

...