Как добавить дефис к определенным ячейкам c в столбце Pandas - PullRequest
3 голосов
/ 29 мая 2020

У меня есть DataFrame, в котором не все даты указаны правильно. Мне нужно очистить некоторые даты, чтобы Pandas .to_datetime смог проанализировать информацию.

Это мой DataFrame:

import pandas 
datums = {'Naam': ['Alfa', 'Beta', 'Gamma', 'Delta', 'Epsilon', 'Zieta', 'Icta', 'Thieta', 
               'Jotta', 'Kappa', 'Lambda', 'Mu', 'Nu'],
   'Datum': ['2842001', '0952002', '1312003', '1112004', '1122005', '3122006', '2232007', '3112008', 
             '1212009', '9102010', '3292011', '3302012', '4412013']}

df = pandas.DataFrame(datums, columns=['Naam', 'Datum'])

Первая строка с Naam Alfa явно опечатка of 28042001.

Я могу фильтровать правильные строки с помощью str.contains ('^ [1 | 2] [4-9 [4-9] .... $'

Когда я пытаюсь использовать str.replace, я не могу сохранить существующие данные, добавляя дефисы только в нужном месте.

Это то, что я пробовал:

df.Datum.str.replace(r'^[1|2][4-9][4-9]....$', '\d\d-\d-\d\d\d\d', regex=True)

Это возвращает ошибку неправильного escape \ d в позиции 0

Я также пробовал:

df.Datum.str.replace(r'^[1|2][4-9][4-9]....$', '{}-{}-{}'.format(df['Datum'][:2], df['Datum'][2:3], df['Datum'][3:]), regex=True)

Это работает, но ничего не меняет.

Я попытался поиграть с кодом, но безуспешно. Указатель будет признателен.

1 Ответ

1 голос
/ 29 мая 2020

Вы можете использовать

df['Datum'] = df['Datum'].str.replace(r'^(\d{2})(\d)(\d+)$', r'\1-\2-\3')

Соответствует шаблону ^(\d{2})(\d)(\d+)$:

  • ^ - начало строки
  • (\d{2}) - Группа 1 (на его значение можно ссылаться из шаблона замены с помощью обратной ссылки замены \1): две цифры
  • (\d) - Группа 2 (\2): одна di git
  • (\d+) - Группа 3 (\3): любые 0 или более цифр
  • $ - до конца строки.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...