서비스 기획자의 성장기록

[Today I leaned] 2023.12.11.월: DateTimeIndex 본문

Today I leaned..

[Today I leaned] 2023.12.11.월: DateTimeIndex

Jenny Noh 2023. 12. 11. 16:48

📌 DateTimeIndex

CNSHA_df에서 'work_start_time' 컬럼의 값과 'work_end_time' 컬럼의 값을 하나씩 가져와서 그 사이에 한시간 간격으로 timestamp를 생성하여 그것을 새로운 열의 값으로 넣고 싶었다.

 

그런데 TypeError이 뜨면서 실행이 안된다.

내 예상은 'work_start_time' 컬럼과 'work_end_time' 컬럼에서 값을 하나씩 가져와서 date_range로 연산한 값을 차례로 반환하는 거였는데 아닌가보다. 😅

정확한 사유는 "Cannot convert input"

 

예상한 오류의 원인은...🤔

① date_range() 함수로 감쌌기 때문에 레코드가 하나씩 반환되어 연산되는거 (이게 broadcasting 맞나?)가 안된다.

② date_range() 함수로 반환되는 값이 index이기 때문에 레코드 하나에 값으로 넣는 것이 안된다.

 

 

그래서 DateTimeIndex에 대해서 찾아봤다.

 

DateTimeIndex란 특정한 순간에 기록된 timestamp 형식의 시계열 자료를 다루기 위한 인덱스이다.

그러니까 리스트나 배열이 아닌 인덱스 값이라는 게 중요하다.

 

이걸 데이터 프레임의 값으로 넣기 위해서는 인덱스 -> 값 (리스트)로의 변환이 필요했다.

 

 

그래서...

① range(len(CNSHA_df))로 인덱스 값을 i로 하나씩 반환한 다음,

CNSHA_df['work_start_time']과 CNSHA_df['work_end_time]의 각 행을 차례로 불러오기 위함..

 

② 이걸로 pd.date_range 함수에 넣어 각 행(=선박)의 worked_time_list를 반환했다.

 

③ pd.date_range에서 반환되는 timestamp들을 리스트로 받아서,

 

④ pd.Series로 변환해서 새로운 컬럼 CNSHA_df['worked_time_list']에 넣으면 완성!!! 😆👍