여러데이터를 보게되면 시간의 형식이 달라서 

곤란한 경우가 있다 예를 들어 A데이터는 자정을 15일 00시라고 하고 B데이터는 14일 24시라고 하는 경우이다.

B의 경우에는 판다스의 데이터타임이 시간을 인식하지 못하여 타임으로 변환하지 못한다.

 

time00 = '2022021500'
pd.to_datetime(time00, format='%Y%m%d%H')
Timestamp('2022-02-15 00:00:00')
time24 = '2022021424'
pd.to_datetime(time, format='%Y%m%d%H')
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
~\anaconda3\lib\site-packages\pandas\core\tools\datetimes.py in _to_datetime_with_format(arg, orig_arg, name, tz, fmt, exact, errors, infer_datetime_format)
    508         try:
--> 509             values, tz = conversion.datetime_to_datetime64(arg)
    510             dta = DatetimeArray(values, dtype=tz_to_dtype(tz))

 

보통의 날은 문자열의 처리로 가능하겠지만 월이바뀌는 01/31/24과 02/01/00같은 경우에는 곤란할 것이다.

 

그렇기 때문에 마지막 24라는 문자열을 00으로 대체후에 타임델타를 이용하여 하루 이후로 가는  방식이 이상적인 것 같다

 

from datetime import datetime, timedelta

def zerofrom24(datetime, _format):
    datetime = str(datetime)
    try:
        return pd.to_datetime(datetime, format = _format)
    except:
        datetime = datetime[:-2] + '00'
        return pd.to_datetime(datetime, format = _format)+ timedelta(days=1)
    
print(zerofrom24('2022021424','%Y%m%d%H'))
print(zerofrom24('2022021500','%Y%m%d%H'))
2022-02-15 00:00:00
2022-02-15 00:00:00
print(ex)
print(ex.map(lambda x : zerofrom24(x,'%Y%m%d%H')))
20    2021010121
21    2021010122
22    2021010123
23    2021010124
Name: 측정일시, dtype: int64
20   2021-01-01 21:00:00
21   2021-01-01 22:00:00
22   2021-01-01 23:00:00
23   2021-01-02 00:00:00
Name: 측정일시, dtype: datetime64[ns]

이렇게 모든 것을 00으로 맞춘후에 조인하면된다

+ Recent posts