У меня есть столбец «даты» в 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)
Любая помощь приветствуется.
Если кто-нибудь знает правильное регулярное выражение, как покрыть только описанные выше крайние случаи, это тоже очень поможет.