функция для извлечения целого числа с помощью регулярного выражения возвращает не тип - PullRequest
0 голосов
/ 28 сентября 2018

Я написал функцию для извлечения целого числа из строк.Пример строк приведен ниже, и это столбец в моем фрейме данных.Вывод, который я получил, в квадратных скобках, с большим количеством цифр внутри.Я хочу использовать эти числа для дальнейших вычислений, но когда я проверяю, что это такое, вместо целого числа, это не тип.Это почему?и как я могу преобразовать его в целое число, чтобы я мог найти .sum () или .mean () с полученными числами, которые я получил?В идеале, я хочу, чтобы извлеченное целое число было другим столбцом, например, с str.extract (regex, inplace = True).

Вот часть моих данных, которая является столбцом в моем фрейме данных df2017

Bo medium lapis 20 cash pr gr
Porte monnaie dogon vert olive 430 euros carte
Bo noires 2015 fleurs clips moins brillant 30 ...
Necklace No 20 2016 80€ carte Grecs 20h00 salo...
Bo mini rouges 30 carte 13h it
Necklace No 17 2016 100€ cash pr US/NYC crois ...
Chocker No 1 2016 + BO No 32 2016 70€ cash pr …

Вот мой код

def extract_int_price():
    text=df2017['Items'].astype(str)
    text=text.to_string()
    amount=[int(x) for x in re.findall('(?<!No\s)(?<!new)(?!2016)(\d{2,4})+€?', text)]
    print (amount)

Спасибо!

Ответы [ 3 ]

0 голосов
/ 28 сентября 2018

Если ваша проблема заключается в получении суммы целых чисел, то вы можете просто:

sum(int(x) for x in ...)


Однако, если ваша проблема связана с регулярным выражением, то вам следует подумать об улучшении механизма фильтрации (что должно войти).Вы можете также рассмотреть возможность фильтрации вручную (хотя и не идеально) слово за словом (определение того, какое слово не имеет значения).

0 голосов
/ 28 сентября 2018

Ваша функция возвращает None, потому что вы забыли оператор return.Поскольку каждая функция в Python имеет возвращаемое значение, пропущенный оператор return подобен возвращению None.

0 голосов
/ 28 сентября 2018

Вы хотите использовать str.findall или str.extractall:

In [11]: REGEX = '(?<!No\s)(?<!new)(?!2016)(\d{2,4})+€?'

In [12]: s = df2017['Items']

In [13]: s.str.findall(REGEX)
Out[13]:
0                 [20]
1                [430]
2           [2015, 30]
3    [016, 80, 20, 00]
4             [30, 13]
5           [016, 100]
6       [016, 016, 70]
dtype: object

In [14]: s.str.extractall(REGEX)
Out[14]:
            0
  match
0 0        20
1 0       430
2 0      2015
  1        30
3 0       016
  1        80
  2        20
  3        00
4 0        30
  1        13
5 0       016
  1       100
6 0       016
  1       016
  2        70

Как правило, extractall предпочтительнее, поскольку он удерживает васв NumPy, а не с помощью серии списков Python.

...