* 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
✅ 두 방법 비교:
① 숫자 인덱스 슬라이싱
- 전제 조건: 2018년 데이터가 정확히 731번~1095번 인덱스에 있다는 걸 이미 알고 있어야 함.
- 즉, 날짜와 상관없이 위치 정보에 의존하는 접근 방법.
- 빠르고 간단하지만, 유연성은 떨어짐.
② 불린 인덱싱 (날짜 기반)
- 날짜 값을 기준으로 조건을 걸어 선택.
- 날짜 컬럼이 datetime 형식이거나 문자열 비교가 가능한 상태여야 함.
- 데이터가 바뀌어도 유연하게 적용 가능.
- 보다 일반적이고 안전한 방식.
🎯 결론:
네, 원칙적으로는 날짜로 걸러야 할 때는 불린 인덱싱이 더 정확하고 직관적합니다.
그런데 학습이나 과제에서는 보통 문제에서 “2018년은 731~1095번 인덱스에 있다”고 미리 정해주기 때문에 편의상 슬라이싱을 사용하는 거예요.
'Data Science > Pandas' 카테고리의 다른 글
[elice pandas] 데이터 정제, 데이터 병합 (0) | 2025.05.12 |
---|---|
[elice pandas] ',' , '-' replace 간단하게 하기, 형변환 (0) | 2025.05.12 |
[elice 머신러닝] dataframe 문제.. (0) | 2025.05.06 |
[pandas] RFM분석 (2) | 2024.07.14 |
[pandas] 데이터 전처리 및 분석 연습2 (0) | 2024.07.08 |