Python: изменение формата нескольких дат в строке на формат даты и времени - PullRequest
2 голосов
/ 16 марта 2020

Я пытаюсь преобразовать другую дату в строковом формате в формат даты и времени. У меня есть около ~ 1 000 000 строк дат в столбце «status_change_date». Проблема в том, что существует много разных форматов, и я не знаю, в каком формате они все.

Итак, я пытаюсь использовать эту функцию в примечании Jupyter:

def parsing_date(date_string):
    for date_format in ("%d/%m/%Y %H:%M:%S", "%m/%d/%Y %H:%M:%S", "%m/%d/%Y %H:%M:%S%p", "%d/%m/%Y %H:%M:%S%p", "%-m/%-d/%Y %H:%M:%S", "%-d/%-m/%Y %H:%M:%S", "%-m/%-d/%Y %H:%M:%S%p", "%-d/%-m/%Y %H:%M:%S%p"):
        try:
            return datetime.strptime(date_string, date_format)
        except ValueError:
            raise
            print(date_string)
        raise ValueError('Something is wrong')

затем,

data['status_chage_date'].apply(parsing_date)

Я печатаю ошибку, чтобы я мог учесть одну по одному в моей функции, пока нет больше ошибки. Тем не менее, я сталкиваюсь с этим сообщением об ошибке:

ValueError: time data '17/10/2019 05:49:51' does not match format '%m/%d/%Y %H:%M:%S'

или

strptime() argument 1 must be str, not None

Я думал, что охватил формат в своей функции, и вторая ошибка странная, так как я исключил строки, которые имеют None значение.

Что я делаю не так и есть ли лучший способ сделать это?

1 Ответ

5 голосов
/ 16 марта 2020

обратите внимание, что вы поднимаете при возникновении ошибки! Вам нужно проверить все свои возможности раньше:

import pandas as pd 

def parsing_date(date_string):
    d = None
    for date_format in ("%d/%m/%Y %H:%M:%S", "%m/%d/%Y %H:%M:%S", "%m/%d/%Y %H:%M:%S%p", "%d/%m/%Y %H:%M:%S%p", "%-m/%-d/%Y %H:%M:%S", "%-d/%-m/%Y %H:%M:%S", "%-m/%-d/%Y %H:%M:%S%p", "%-d/%-m/%Y %H:%M:%S%p"):
        try:
            d = datetime.strptime(date_string, date_format)
            break
        except:
            pass
    if d is not None:
        return d
    else:
        return pd.NaT

Также обратите внимание, что если ваш день и месяц находятся между цифрами от 1 до 12, вы не будете уверены, что ваш разбор соответствует правильной дате и времени. Если возможно, вам следует выяснить причины различных форматов и проанализировать их по отдельности.

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