Python, исправьте даты с помощью регулярных выражений - PullRequest
0 голосов
/ 04 февраля 2019

У меня есть столбец «даты» в Excel, собранный разными людьми за годы, и Я хочу создать правильные столбцы дат в кадре данных Pandas из этого «грязного» столбца с датами начала и окончания. Эта грязная колонка полна мусора и предложений, и сложно извлечь из нее день / месяц / год.Мне удалось немного почистить, но я все еще далеко от конца.Это пример столбца грязных дат выглядит так:

['Apr 1 - 10 2012', 'Aug 6 - sept 17 2018', 'Jan 2017 (explosion) - dec 
 31', 'April 15 - Nov 20', "Mar 1 - Jun 30 '12", "Sep 27 - Nov 30, 
 2012", "Dec 7, 2015 - Feb 15, '16", "June 21 2016 - June 27, 2016",
 "July 6 - 13 (est), 2016", "Mar 28 2016 - dec 31 2017", 
 "Nov 30, 2016 - Aug 31, 2016", "1 oct - 15 oct 2017",
 "March 26 to May 3, 2017", "Jan 4,2018", 
 "Jan 26, 2017 - end of march 2018", 
 "5 days assumed for Sep '11, 
 "Sep 15 - Oct 12 '11 (abc 50 n/g) something in 2015 but something 
  else happened '16", 
 "Mar 17 - Apr 15, '12 (assumed 1 mo.)", 
 "Jan 1 - 31 '12 a/b due to many words here and descriptions."] 

У меня более 30 000 строк.Для начала я попытался сначала разделить их на «-», потому что все они, кажется, имеют «к» или «-» и выполнил следующее, но это не дало хороших результатов, я не могу охватить все случаи, упомянутые выше.

def start_date(row):
    row_start = ''
    num_words = len(str(row).split(' '))
    # trying to skip long rows with many words but I don't think this is the way to go
    if (row is not None) and (type(row) != float) and (type(row) is not datetime.datetime) and (num_words <= 7) and (("'" in row) or ("\"" in row)):
       row = row.replace('"', "'")
       row = row.replace('!', "1")
       row = row.replace("`", "")
       row = row.replace("' ", "'")
       row = row.replace(", ", " ")
       year_start = re.search(r"""(?<=\')(\d\d)""", row)[0]
       row = row.replace('to', '-')

       row_start = row.split('-')[0]
       row_start = row_start.replace(' \"', ',')
       row_start = row_start.replace(" \'", ',')
       row_start = row_start.replace(",,", ',')
       row_start = str(row_start).strip()

return str(row_start) + ', 20' + str(year_start)

Любая помощь приветствуется.

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

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