Удаление всех символов, которые не являются цифрами в серии pandas строк - PullRequest
0 голосов
/ 15 февраля 2020

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

df = pd.series(['0312861','00','66065','6-0io09in4','.314', '3194890809', ':"<>":', '3456.85236', '3465.2154', '312.724146','300.3634865'], index = [1,2,3,4,5,6,7,8,9,10,11])

цифры

  1. 0312861
  2. 00
  3. 66065
  4. 6-0io09in4
  5. .314
  6. 3194890809
  7. : "<>":
  8. 3456.85236
  9. 3465.2154
  10. 312.724146
  11. 300.3634865

Для этого я попробовал код:

df['numbers'] = df['numbers'].str.replace('\D', '', regex=True)

Я ожидаю, что результат будет: цифры

  1. 0312861
  2. 00
  3. 66065
  4. 6009
  5. 314
  6. 3194890809
  7. Нан
  8. 345685236
  9. 34652154
  10. 312724146
  11. 3003634865

Однако я получаю следующий вывод: числа

  1. 0312861
  2. 00
  3. 66065
  4. 60094
  5. 314
  6. 3194890809
  7. Нан
  8. Нан
  9. Нан
  10. Нан
  11. Nan * 108 8 *

Так что, похоже, мое регулярное выражение принимает последние три записи как числа с плавающей запятой, поэтому оно удаляет их. Однако я хочу просто удалить точку (.) Из трех последних записей.

Я пытался найти свое конкретное c решение, но не нашел его, поэтому я публикую его здесь в надежде получить один.

1 Ответ

0 голосов
/ 15 февраля 2020

Почему вы думаете, что так сложно, когда ответ так прост. Получить все символы один за другим и проверить, является ли ди git.

Я не знаю, как работать в pandas, но если я это сделаю, то я сделаю временный список, а затем я попытаюсь получить только элементы из этого списка, а затем я попытаюсь получить элемент один за другим, а затем проверить символ один за другим, чтобы увидеть, есть ли di git, а если нет, то я передам.

Пример :

tempList = []

for item in thisList: # thisList will be your list
    tempItem = "" #temporary item
    for character in item:
        # I see you have and some floats there if you want and floats then add that or statement
        if character.isdigit() or character == ".":
            tempItem = f"{tempItem}{character}"
    tempList.append(tempItem)

После этого я получу временный список только с цифрами ... Да, это мой глупый ответ. Это не официальный ответ, я просто попытался помочь.

...