작성
·
92
0
to_datetime 관련해서 질문드립니다.
df['StartTime'] = pd.to_datetime(df['StartTime'])
df['EndTime'] = pd.to_datetime(df['EndTime'])
df['SessionDuration'] = df['StartTime'].dt.total_seconds() / 60
df['SessionDuration'] = (df['EndTime'] - df['StartTime']).dt.total_seconds() / 60
위 코드에서 1번은 에러, 2번은 잘 실행이 됩니다.
1번이 아래와 같은 에러가 나는 이유가 궁급합니다
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
Cell In[51], line 6
3 df['EndTime'] = pd.to_datetime(df['EndTime'])
4 df.info()
----> 6 df['SessionDuration'] = df['StartTime'].dt.total_seconds() / 60
7 # df['SessionDuration'] = (df['EndTime'] - df['StartTime']).dt.total_seconds() / 60
8 # print(df['SessionDuration'].max())
9 df.head()
AttributeError: 'DatetimeProperties' object has no attribute 'total_seconds'
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. goodgail2247님의 질문에 답변드리겠습니다.
pd.to_datetime
함수를 사용하여 ‘StartTime’과 ‘EndTime’ 열을 datetime 타입으로 변환하는 과정은 올바르게 진행하셨습니다.
1번 코드에서 에러가 발생하는 이유는 dt.total_seconds()
메소드는 DateTimeIndex
, TimedeltaIndex
, 또는 Timedelta
객체에 대해서만 사용할 수 있기 때문입니다. 여기서 df['StartTime'].dt
는 datetime 객체의 속성에 접근할 수 있게 해주지만, total_seconds
메소드를 직접적으로 사용할 수 없습니다. 그래서 df['StartTime']
단독으로는 total_seconds()
함수를 사용할 수 없으며, 이는 Timedelta
객체인 df['EndTime'] - df['StartTime']
같은 시간 차이 결과에 대해서만 사용할 수 있습니다.
따라서 2번 코드가 잘 실행되는 이유는 df['EndTime'] - df['StartTime']
으로부터 반환된 Timedelta
객체에 대하여 .dt.total_seconds()
메소드를 호출함으로써, 각 세션의 지속 시간을 초 단위로 계산한 다음 60으로 나누어 분 단위로 변환하기 때문입니다.
정리하자면, total_seconds()
는 datetime 객체가 아닌 timedelta 객체에서 사용할 수 있는 메소드입니다. 따라서 datetime 객체인 ‘StartTime’과 ‘EndTime’의 차이를 계산한 결과인 timedelta 객체에 대해서 사용하는 것이 올바른 방법입니다.