강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

goodgail2247님의 프로필 이미지
goodgail2247

작성한 질문수

to_datetime 관련 질문

작성

·

92

0

to_datetime 관련해서 질문드립니다.

df['StartTime'] = pd.to_datetime(df['StartTime'])

df['EndTime'] = pd.to_datetime(df['EndTime'])

 

  1. df['SessionDuration'] = df['StartTime'].dt.total_seconds() / 60

  2. 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 객체에 대해서 사용하는 것이 올바른 방법입니다.

goodgail2247님의 프로필 이미지
goodgail2247

작성한 질문수

질문하기