Próbowałem konwertować datę zapisaną w moim dataframe do formatu DateTime. Kolumna, którą próbuję konwertować, ma daty przechowywane w formacie mm / dd / yy .

To jest skrypt, który został użył do konwersji:

df['dt'] = pd.to_datetime(df['dt'], format = '%d-%m-%Y')

Skrypt działa bez błędu dokładnie przekształcając daty - choć podany format jest nieprawidłowy.

Moje pytanie brzmi, dlaczego skrypt nie rzucił błędu, gdy zapewniony jest nieprawidłowy format?

-1
sheeni 1 kwiecień 2020, 17:24

2 odpowiedzi

Najlepsza odpowiedź

Rozważ datę 1-2-2020. Teraz, patrząc na datę, możesz powiedzieć dokładnie, która data jest? Odpowiedź brzmi: nie, bo jeśli wiesz, w jaki sposób data jest sformatowana lub jak data została utworzona, tj. Niezależnie od tego, czy rok - miesiąc-rok lub miesiąc-dzień - nie możesz naprawdę powiedzieć, czy powyższa data jest {{x1} } lub {x2}}. Więc klucz tutaj weryfikuje zestaw danych i jego początki. Istnieje wiele technik intuicji, które można zastosować do swoich danych, takich jak, jeśli dane są pochodzić z Stanów Zjednoczonych, wspólny format daty jest MM/DD/YYYY lub jeśli Indie jest DD-MM-YY.

PRÓBA

>>> import pandas as pd
>>> df = pd.DataFrame({'dt': ['1-1-2020', '15-2-2020', '3-24-2020']})
>>> df
          dt
0   1-1-2020
1  15-2-2020
2  3-24-2020

Kod - rzuca błąd zgodnie z oczekiwaniami

>>> pd.to_datetime(df['dt'], format = '%d-%m-%Y')
Traceback (most recent call last):
  File "/home/vishnudev/anaconda3/envs/sumyag/lib/python3.7/site-packages/pandas/core/tools/datetimes.py", line 448, in _convert_listlike_datetimes
    values, tz = conversion.datetime_to_datetime64(arg)
  File "pandas/_libs/tslibs/conversion.pyx", line 200, in pandas._libs.tslibs.conversion.datetime_to_datetime64
TypeError: Unrecognized value type: <class 'str'>

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/vishnudev/anaconda3/envs/sumyag/lib/python3.7/site-packages/pandas/util/_decorators.py", line 208, in wrapper
    return func(*args, **kwargs)
  File "/home/vishnudev/anaconda3/envs/sumyag/lib/python3.7/site-packages/pandas/core/tools/datetimes.py", line 778, in to_datetime
    values = convert_listlike(arg._values, True, format)
  File "/home/vishnudev/anaconda3/envs/sumyag/lib/python3.7/site-packages/pandas/core/tools/datetimes.py", line 451, in _convert_listlike_datetimes
    raise e
  File "/home/vishnudev/anaconda3/envs/sumyag/lib/python3.7/site-packages/pandas/core/tools/datetimes.py", line 416, in _convert_listlike_datetimes
    arg, format, exact=exact, errors=errors
  File "pandas/_libs/tslibs/strptime.pyx", line 142, in pandas._libs.tslibs.strptime.array_strptime
ValueError: time data '3-24-2020' does not match format '%d-%m-%Y' (match)
0
Vishnudev 1 kwiecień 2020, 14:38

Kod poniżej działa dla mnie:

df['date'] = pd.to_datetime(df['date'], format = '%d-%m-%Y', unit='ns')

Lub

df['date'] = pd.to_datetime(df['date'], format = '%d-%m-%Y')
df['date'] = pd.to_datetime(df.date, unit='ns')
0
Fariliana Eri 25 sierpień 2020, 04:02