Pandas.series str extract не получает строку из одной цифры - PullRequest
0 голосов
/ 24 апреля 2019

Мне нужно извлечь цифру из столбца строки.Но str.extract (\ d) не работает для строки, состоящей только из чисел.

df['extract'] = df['original'].str.extract('(\d+)')

Пожалуйста, смотрите фрейм данных как словарь:

{'original': {0: 'NO RATING',
  1: 4,
  2: '3-',
  3: 3,
  4: '4-',
  5: '2-',
  6: '2+',
  7: '4+',
  8: '5-',
  9: 5,
  10: '5+',
  11: 2,
  12: '3+',
  13: '6+',
  14: '6-',
  15: 6,
  16: 7},
 'extract': {0: nan,
  1: nan,
  2: '3',
  3: nan,
  4: '4',
  5: '2',
  6: '2',
  7: '4',
  8: '5',
  9: nan,
  10: '5',
  11: nan,
  12: '3',
  13: '6',
  14: '6',
  15: nan,
  16: nan}}

df - это фрейм данных pd с 2 столбцами, df ['orginal'] содержит значения типа 2+, 2-, 2, 3-, 3, 3+, NO RATING.

код работает, генерирует новый столбец df ['extract'], которыйисправить для таких значений, как 2- (дает 2), 3+ (дает 3), НЕТ РЕЙТИНГА (дает NaN).Но это неправильно для значений типа 2 (дает NaN, но я ожидаю 2) и 3 (дает NaN, но я ожидаю 3).

мой результат

Ответы [ 2 ]

0 голосов
/ 24 апреля 2019

Просто убедитесь, что у вас есть все строки, прежде чем использовать extract

df['extract'] = df['original'].astype(str).str.extract('(\d+)')
0 голосов
/ 24 апреля 2019

Проблема в том, что некоторые значения являются целыми, а некоторые - строковыми.Хотя str.extract не получает ошибку, он не извлекает правильные значения, если это целое число.Вы можете использовать лямбда-функции и функции findall для обработки этого случая.Затем также добавьте необязательный оператор (+), чтобы получить больше цифр, если значение> 9.

df['extract'] = df['original'].map(lambda x: re.findall('(\d+)', str(x))) \
                           .map(lambda i: i[0] if len(i)>0 else None)

Результат:

   original extract
0   5         5
1   13+      13
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...