Mam dostęp tylko do odczytu do bazy danych, które kwerendy i odczytu w ramce danych Pandy przy użyciu pymssql. Jedna ze zmiennych zawiera daty, z których niektóre są przechowywane o północy 01 stycznia 0001 (tj. 0001-01-01 00: 00: 00.0000000). Nie mam pojęcia, dlaczego te daty powinny być włączone - o ile mi wiadomo, nie są one uznawane przez SQL Server jako poprawna data i prawdopodobnie wynikają z domyślnego wprowadzenia danych. Ale z tym właśnie muszę pracować. To może być odtworzony jako dataframe następująco:Jak zapobiec funkcji pandas.to_datetime() przed konwersją 0001-01-01 na 2001-01-01
import numpy as np
import pandas as pd
tempDF = pd.DataFrame({ 'id': [0,1,2,3,4],
'date': ['0001-01-01 00:00:00.0000000',
'2015-05-22 00:00:00.0000000',
'0001-01-01 00:00:00.0000000',
'2015-05-06 00:00:00.0000000',
'2015-05-03 00:00:00.0000000']})
dataframe wygląda następująco:
print(tempDF)
date id
0 0001-01-01 00:00:00.0000000 0
1 2015-05-22 00:00:00.0000000 1
2 0001-01-01 00:00:00.0000000 2
3 2015-05-06 00:00:00.0000000 3
4 2015-05-03 00:00:00.0000000 4
... z następujących dtypes:
print(tempDF.dtypes)
date object
id int64
dtype: object
print(tempDF.dtypes)
Ja jednak rutynowo datę konwersji pola w ramce danych do formatu datetime za pomocą:
tempDF['date'] = pd.to_datetime(tempDF['date'])
Jednak przez przypadek zauważyłem, że data 0001-01-01 jest konwertowana na 2001-01-01.
print(tempDF)
date id
0 2001-01-01 0
1 2015-05-22 1
2 2001-01-01 2
3 2015-05-06 3
4 2015-05-03 4
Zdaję sobie sprawę, że daty w oryginalnej bazie danych są nieprawidłowe, ponieważ SQL Server nie widzi 0001-01-01 jako daty prawidłowej. Ale przynajmniej w formacie 0001-01-01 takie brakujące dane są łatwe do zidentyfikowania w mojej ramce danych Pandy. Jednak, gdy pandas.to_datetime() zmienia te daty, tak że mieszczą się w możliwym zakresie, bardzo łatwo jest pominąć takie odstające wartości.
Jak mogę się upewnić, że pd.to_datetime nie interpretuje nieprawidłowo dat odstępu?
Idealny. Dzięki za rozwiązanie i dodatkowe uzasadnienie. – user1718097