본문 바로가기
데이터분석/Pandas&Numpy

pandas와 시간 범위, 인덱스

by ADELA_J 2023. 7. 18.

- 데이터가 누락되어 있을때

▶ date_range 메서드를 사용하면 시간 인덱스를 생성할 수 있음.

▶ ebola 데이터프레임의 앞쪽 5개의 데이터를 추출해서 새로운 데이터 프레임을 만듦.

▶ Date 열을 인덱스로 먼저 지정해야함 (아님 오류생김) (아닌데 되는데 인덱스가 0,1,2,3,4 로 새로 생길뿐)

 

<에볼라 확산 속도 비교하기>

 

- Date열을 인덱스로 지정하고 x축을 Date로 y축을 사망자 수로 해서 그린 그래프임.

▶ 그런데 각 나라마다 발병일이 다르기때문에 그래프가 그려지기 시작한 지점도 다름.

  - 그래서 가장 처음 발병한 Guinea와 동일한 위치로 옮겨야 확산 속도를 제대로 비교할 수 있음.

그래서 옮기기 위해 

▷ Date열을 datetime으로 변환해서 ebola을 다시 불러옴.  

▶근데 중간중간 NaN이 있는데, 이것도 포함시켜야 확산 속도를 제대로 비교할 수 있다.

그래서 일단

▶Date을 인덱스로 설정하고 최댓값과 최솟값으로 시간 범위를 생성해서 new_idx에 저장하고

이렇게 하면 날짜가 아예 없었던 데이터의 인덱스를 생성할 수 있음.

https://pandas.pydata.org/docs/reference/api/pandas.date_range.html?highlight=date_range 

▶ new_idx를 reindex 해준다.

▷ Date는 NaT이지만,,,ㅎ 인덱스 Date는 채워져 있는걸 볼 수 있다..!

▶ last_valid_index(가장오래된거), first_valid_index(가장최근)를 사용해서 발병을 구한 것.

(유효한 값이 있는 첫번째/마지막 인덱스 반환하는 메서드)

apply 는 모다? 요것이다 https://dev-adela.tistory.com/138

 

발병일을 동일한 시작일로 옮기기 위해 

▶ 처음 발병한 날(earliest_date)에서 각 나라의 발병일을 뺀 만큼(shift_values)만 옮기기 위해 날짜 계산.

이제 발병일을 옮기면 됨.

▶ shift 메서드를 사용해서 모든 열의 값을 shift_values 값만큼 옮기면됨.

   ▷ shift 는 인잣값만큼 데이터를 밀어내는 메서드. 

그리고 빈 딕셔너리(ebola_dict)를 만들어주고 데이터프레임으로 변환하면됨.

▼ 최초발병일(2014-03-22)을 기준으로 모든 열의 데이터가 옮겨

▶ 이제 인덱스를 Day열로 지정하고 그래프에 필요 없는 Date, Day는 삭제하면 그래프를 그리기 위해 데이터프레임 완성

그리고 그래프 다시 그려보기!

이게 뭐당가 왜케 작아