DS가 되기 위한 여정 👩‍💻

Data Science/Pandas

[elice pandas] 데이터 변환 (map(), apply(), lambda 함수) , 데이터 요약/추출

Tashapark 2025. 5. 12. 11:56
728x90

* elice 강의안

 

- .map()을 python에서 매핑 해주는 것과 달리 pandas에서는 df의 특정 열 전체를 바꾸는데 사용

 

- apply()는 똑같이 함수 적용할 때 씀

- 변환 할 때마다 함수를 지정해줘야 함..

- 그럼 코드 더러워지니깐 lambda 씀

- 위처럼 합쳐서 코드 짜면됨. 

- 와,, 함수 값을 그대로 df에 넣을 수 있는지는 몰랐음. 

 


- group by 주의할 것


 

[Boolean indexing]

 

[loc]

- loc를 사용할 때는 [인덱스 이름, 컬럼이름] 순서임. 

- 불리안 인덱싱 할 땐 "인덱스 이름" 위치에 넣어야 함. 

 

[iloc]

연속적인 객체(데이터프레임의 인덱스) 범위를 지정해 가져오는 방법인 슬라이싱을 활용하면 범위를 지정하여 해당 범위에 해당하는 데이터들을 불러올 수도 있습니다.
이 때 유의할 점은, `loc`은 라벨 기반 인덱싱을 사용하기 때문에 **`A:B`로 슬라이싱을 하면 A 부터 B까지, 즉 B포함한 범위를 인덱싱 한다는 점**입니다. 예를들어 `3:6` 의 범위를 지정한다면 인덱스가 3부터 6까지인 데이터, `"어른":"외국인"` 의 범위를 지정한다면 "어른"부터 "외국인" 까지의 데이터를 지정하게 됩니다. 
또한 이렇게 슬라이싱을 활용해 추출한 데이터들은 복수의 데이터이므로, 시리즈 혹은 데이터프레임 형태라는 사실을 알아두면 좋습니다.

 

df.loc[3:6,"어른":"외국인"]
# 3~6/ 어른~ 외국인까지임. 파이썬과 다르게 마지막 것도 포함임. 라벨러 상태여서

 

## 순서를 활용한 데이터 추출: iloc

다음으로 행과 열의 정수 위치를 이용해 데이터를 추출하는 `iloc`에 대해 알아보겠습니다. 앞서 `loc`이 행과 열의 이름을 좌표로 삼아 해당 위치의 데이터를 추출했다면, `iloc`은 **행과 열의 정수형 위치, 즉 순서를 좌표로 삼아 해당 위치의 데이터를 추출**합니다. 예를 들어 4번 행(2016년 1월 5일)의 7번 열(외국인) 데이터를 추출하면 다음과 같습니다.

`iloc` 역시 슬라이싱을 활용하여 지정한 범위의 데이터를 추출할 수 있습니다. 

여기서 `loc`과의 중요한 차이점이 있는데, `iloc`은 위치 기반 인덱싱을 사용하여 범위를 지정하기 때문에 시작은 포함되고 끝은 포함되지 않습니다. 즉 `iloc`에서 **`A:B`로 슬라이싱을 하면 A부터 B-1까지, 즉 B를 포함하지 않는 범위를 인덱싱**합니다. B를 포함해서 인덱싱하는 `loc`과는 다르기 때문에 코드를 작성하거나 해석할 때 유의하셔야 합니다.
`iloc`을 활용해서 인덱싱을 3~6번 행, 4~6번 열의 값을 추출하면 다음과 같습니다.

 

df.iloc[3:7, 4:7] 
# 3~6/ 4~6 까지니 주의할 것.

 

 

미세먼지 데이터 mm에서 2018년 1월 1일의 행 인덱스는 731, 2018년 12월 31일의 행 인덱스는 1095 입니다.loc 또는 iloc을 활용해 2018년의 "날짜"와 "미세먼지", "초미세먼지" 컬럼 값을 추출해 데이터프레임으로 저장하세요.

 

-  iloc, loc 너무 헷갈리고, 불린 인덱싱까지 들어가면 더 머리가 아파짐

# loc 또는 iloc을 활용해 지정된 데이터를 dust에 저장합니다.
# None을 지우고 알맞은 코드를 입력하세요.
#dust= mm.loc[731:1095, "날짜": "초미세먼지" ]
dust= mm.iloc[731:1096, 0:3 ]
# 초미세먼지 수치가 제대로 추출되었는지 확인합니다.
dust

 

✅ 두 방법 비교:

숫자 인덱스 슬라이싱

dust = mm.loc[731:1095, ["날짜", "미세먼지", "초미세먼지"]]
  • 전제 조건: 2018년 데이터가 정확히 731번~1095번 인덱스에 있다는 걸 이미 알고 있어야 함.
  • 즉, 날짜와 상관없이 위치 정보에 의존하는 접근 방법.
  • 빠르고 간단하지만, 유연성은 떨어짐.

불린 인덱싱 (날짜 기반)

dust = mm.loc[(mm["날짜"] >= "2018-01-01") & (mm["날짜"] <= "2018-12-31"), ["날짜", "미세먼지", "초미세먼지"]]
  • 날짜 값을 기준으로 조건을 걸어 선택.
  • 날짜 컬럼이 datetime 형식이거나 문자열 비교가 가능한 상태여야 함.
  • 데이터가 바뀌어도 유연하게 적용 가능.
  • 보다 일반적이고 안전한 방식.

🎯 결론:

 

네, 원칙적으로는 날짜로 걸러야 할 때는 불린 인덱싱이 더 정확하고 직관적합니다.

 

그런데 학습이나 과제에서는 보통 문제에서 “2018년은 731~1095번 인덱스에 있다”고 미리 정해주기 때문에 편의상 슬라이싱을 사용하는 거예요.

728x90
반응형