Проблемы в чтении столбца даты из CSV в python - PullRequest
0 голосов
/ 22 февраля 2020

Я пытаюсь прочитать столбец даты из файла CSV. Этот столбец содержит даты только в одном формате. Пожалуйста, смотрите данные ниже:

enter image description here

Проблема возникает, когда я пытаюсь прочитать ее с помощью dateparser.

    dateparse=lambda x:datetime.strptime(x, '%m/%d/%Y').date()
    df = pd.read_csv('products.csv', parse_dates=['DateOfRun'], date_parser=dateparse)

Над логами c отлично работает в большинстве случаев, но иногда случайно появляется ошибка, что формат не соответствует, пример ниже:

ValueError: данные времени '2020-02-23' не соответствуют формату '% m / % d /% Y '

Кто-нибудь знает, как это возможно? Потому что этот формат гггг-мм-дд не в моих данных .. Любые советы будут полезны. Спасибо

1 Ответ

2 голосов
/ 23 февраля 2020

Проблема возникает при открытии файла CSV в Excel. Excel по умолчанию (и в зависимости от настроек вашей ОС) автоматически меняет формат даты. Например, в США формат по умолчанию - ММ / ДД / ГГГГ, поэтому если у вас есть дата в CSV-файле, например, ГГГГ-ММ-ДД, она автоматически изменит ее на ММ / ДД / ГГГГ.

Решение НЕ открывать файл csv в Excel, прежде чем манипулировать им в Python. ЕСЛИ вам нужно открыть его, чтобы проверить, посмотрите ли вы в Python, в блокноте или в другом текстовом редакторе.

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

В качестве примера, если вы хотите изменить даты с YYYY-MM-DD, попробуйте следующее:

from datetime import datetime

    def change_dates(date_string):
        try:
            assert datetime.strptime(date_string, '%m/%d/%y'), 'format error'
            return date_string
        except AssertionError, ValueError:
            dt = datetime.strptime(date_string, '%Y-%m-%d')
            return dt.strftime('%m/%d/%Y')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...