ref
import
부분 데이터 꺼내기
- 판다스를 왜 써야 할까?
기본 인덱싱
- 예제1: 기본인덱싱
- 예제2: 슬라이싱
- 예제3: 스트라이딩
- 예제4: 불가능한것
팬시 인덱싱
- 예제1: 인덱스의 리스트 (혹은 ndarray)를 전달
- 예제2: bool로 이루어진 리스트 (혹은 ndarray)를 전달
2차원자료형의 인덱싱
- 예제1
- 예제2: 차원을 유지하면서 인덱싱을 하고 싶으면?
Hash
- 예제1: (key,value)
- 예제2: numpy와 비교
np.random.seed(43052)
att = np.random.choice(np.arange(10,21)*5,200)
rep = np.random.choice(np.arange(5,21)*5,200)
mid = np.random.choice(np.arange(0,21)*5,200)
fin = np.random.choice(np.arange(0,21)*5,200)
key = ['202212'+str(s) for s in np.random.choice(np.arange(300,501),200,replace=False)]
test_dic = {key[i] : {'att':att[i], 'rep':rep[i], 'mid':mid[i], 'fin':fin[i]} for i in range(200)}
test_ndarray = np.array([key,att,rep,mid,fin],dtype=np.int64).T
del(att);del(rep);del(mid);del(fin);del(key)학번 ’202212460’에 해당하는 학생의 출석점수를 알고 싶다면?
(풀이1)
(풀이2)
(풀이2)가 (풀이1)에 비하여 불편한 점 - test_ndarray의 첫칼럼은 student id 이고 두번째 칼럼은 att라는 사실을 암기하고 있어야 한다. - student id가 아니고 만약에 학생이름을 써서 데이터를 정리한다면 모든 자료형은 문자형이 되어야 한다. - 작성한 코드의 가독성이 없다. (위치로 접근하기 때문)
- 요약: hash 스타일로 정보를 추출하는 것이 유용할 때가 있다. 그리고 보통 hash 스타일로 정보를 뽑는 것이 유리하다. (사실 numpy는 정보추출을 위해 개발된 자료형이 아니라 행렬 및 벡터의 수학연산을 지원하기 위해 개발된 자료형이다)
- 소망: 정보를 추출할때는 hash 스타일도 유용하다는 것은 이해함 \(\to\) 하지만 나는 가끔 넘파이스타일로 정보를 뽑고 싶은걸? 그리고 딕셔너리 형태가 아니고 엑셀처럼(행렬처럼) 데이터를 보고 싶은걸? \(\to\) pandas의 개발
pandas 개발동기
엑셀처럼
엑셀처럼 데이터를 테이블 형태로 정리하고 싶다!!
np.random.seed(43052)
att = np.random.choice(np.arange(10,21)*5,20)
rep = np.random.choice(np.arange(5,21)*5,20)
mid = np.random.choice(np.arange(0,21)*5,20)
fin = np.random.choice(np.arange(0,21)*5,20)
key = ['202212'+str(s) for s in np.random.choice(np.arange(300,501),20,replace=False)]
test_dic = {key[i] : {'att':att[i], 'rep':rep[i], 'mid':mid[i], 'fin':fin[i]} for i in range(20)}{'202212380': {'att': 65, 'rep': 55, 'mid': 50, 'fin': 40},
'202212370': {'att': 95, 'rep': 100, 'mid': 50, 'fin': 80},
'202212363': {'att': 65, 'rep': 90, 'mid': 60, 'fin': 30},
'202212488': {'att': 55, 'rep': 80, 'mid': 75, 'fin': 80},
'202212312': {'att': 80, 'rep': 30, 'mid': 30, 'fin': 100},
'202212377': {'att': 75, 'rep': 40, 'mid': 100, 'fin': 15},
'202212463': {'att': 65, 'rep': 45, 'mid': 45, 'fin': 90},
'202212471': {'att': 60, 'rep': 60, 'mid': 25, 'fin': 0},
'202212400': {'att': 95, 'rep': 65, 'mid': 20, 'fin': 10},
'202212469': {'att': 90, 'rep': 80, 'mid': 80, 'fin': 20},
'202212318': {'att': 55, 'rep': 75, 'mid': 35, 'fin': 25},
'202212432': {'att': 95, 'rep': 95, 'mid': 45, 'fin': 0},
'202212443': {'att': 95, 'rep': 55, 'mid': 15, 'fin': 35},
'202212367': {'att': 50, 'rep': 80, 'mid': 40, 'fin': 30},
'202212458': {'att': 50, 'rep': 55, 'mid': 15, 'fin': 85},
'202212396': {'att': 95, 'rep': 30, 'mid': 30, 'fin': 95},
'202212482': {'att': 50, 'rep': 50, 'mid': 45, 'fin': 10},
'202212452': {'att': 65, 'rep': 55, 'mid': 15, 'fin': 45},
'202212387': {'att': 70, 'rep': 70, 'mid': 40, 'fin': 35},
'202212354': {'att': 90, 'rep': 90, 'mid': 80, 'fin': 90}}
- 테이블형태로 보고 싶다.
(방법1) – 행렬이기는 하지만 방법 2,3,4,5 에 비하여 우리가 원하는 만큼 가독성을 주는 형태는 아님..
array([[202212380, 65, 55, 50, 40],
[202212370, 95, 100, 50, 80],
[202212363, 65, 90, 60, 30],
[202212488, 55, 80, 75, 80],
[202212312, 80, 30, 30, 100],
[202212377, 75, 40, 100, 15],
[202212463, 65, 45, 45, 90],
[202212471, 60, 60, 25, 0],
[202212400, 95, 65, 20, 10],
[202212469, 90, 80, 80, 20],
[202212318, 55, 75, 35, 25],
[202212432, 95, 95, 45, 0],
[202212443, 95, 55, 15, 35],
[202212367, 50, 80, 40, 30],
[202212458, 50, 55, 15, 85],
[202212396, 95, 30, 30, 95],
[202212482, 50, 50, 45, 10],
[202212452, 65, 55, 15, 45],
[202212387, 70, 70, 40, 35],
[202212354, 90, 90, 80, 90]])
(방법2)
| att | rep | mid | fin | |
|---|---|---|---|---|
| 202212380 | 65 | 55 | 50 | 40 |
| 202212370 | 95 | 100 | 50 | 80 |
| 202212363 | 65 | 90 | 60 | 30 |
| 202212488 | 55 | 80 | 75 | 80 |
| 202212312 | 80 | 30 | 30 | 100 |
| 202212377 | 75 | 40 | 100 | 15 |
| 202212463 | 65 | 45 | 45 | 90 |
| 202212471 | 60 | 60 | 25 | 0 |
| 202212400 | 95 | 65 | 20 | 10 |
| 202212469 | 90 | 80 | 80 | 20 |
| 202212318 | 55 | 75 | 35 | 25 |
| 202212432 | 95 | 95 | 45 | 0 |
| 202212443 | 95 | 55 | 15 | 35 |
| 202212367 | 50 | 80 | 40 | 30 |
| 202212458 | 50 | 55 | 15 | 85 |
| 202212396 | 95 | 30 | 30 | 95 |
| 202212482 | 50 | 50 | 45 | 10 |
| 202212452 | 65 | 55 | 15 | 45 |
| 202212387 | 70 | 70 | 40 | 35 |
| 202212354 | 90 | 90 | 80 | 90 |
(방법3)
| att | rep | mid | fin | |
|---|---|---|---|---|
| 202212380 | 65 | 55 | 50 | 40 |
| 202212370 | 95 | 100 | 50 | 80 |
| 202212363 | 65 | 90 | 60 | 30 |
| 202212488 | 55 | 80 | 75 | 80 |
| 202212312 | 80 | 30 | 30 | 100 |
| 202212377 | 75 | 40 | 100 | 15 |
| 202212463 | 65 | 45 | 45 | 90 |
| 202212471 | 60 | 60 | 25 | 0 |
| 202212400 | 95 | 65 | 20 | 10 |
| 202212469 | 90 | 80 | 80 | 20 |
| 202212318 | 55 | 75 | 35 | 25 |
| 202212432 | 95 | 95 | 45 | 0 |
| 202212443 | 95 | 55 | 15 | 35 |
| 202212367 | 50 | 80 | 40 | 30 |
| 202212458 | 50 | 55 | 15 | 85 |
| 202212396 | 95 | 30 | 30 | 95 |
| 202212482 | 50 | 50 | 45 | 10 |
| 202212452 | 65 | 55 | 15 | 45 |
| 202212387 | 70 | 70 | 40 | 35 |
| 202212354 | 90 | 90 | 80 | 90 |
(방법4)
| att | rep | mid | fin | |
|---|---|---|---|---|
| 202212380 | 65 | 55 | 50 | 40 |
| 202212370 | 95 | 100 | 50 | 80 |
| 202212363 | 65 | 90 | 60 | 30 |
| 202212488 | 55 | 80 | 75 | 80 |
| 202212312 | 80 | 30 | 30 | 100 |
| 202212377 | 75 | 40 | 100 | 15 |
| 202212463 | 65 | 45 | 45 | 90 |
| 202212471 | 60 | 60 | 25 | 0 |
| 202212400 | 95 | 65 | 20 | 10 |
| 202212469 | 90 | 80 | 80 | 20 |
| 202212318 | 55 | 75 | 35 | 25 |
| 202212432 | 95 | 95 | 45 | 0 |
| 202212443 | 95 | 55 | 15 | 35 |
| 202212367 | 50 | 80 | 40 | 30 |
| 202212458 | 50 | 55 | 15 | 85 |
| 202212396 | 95 | 30 | 30 | 95 |
| 202212482 | 50 | 50 | 45 | 10 |
| 202212452 | 65 | 55 | 15 | 45 |
| 202212387 | 70 | 70 | 40 | 35 |
| 202212354 | 90 | 90 | 80 | 90 |
(방법5)
| att | rep | mid | fin | |
|---|---|---|---|---|
| 0 | 65 | 55 | 50 | 40 |
| 1 | 95 | 100 | 50 | 80 |
| 2 | 65 | 90 | 60 | 30 |
| 3 | 55 | 80 | 75 | 80 |
| 4 | 80 | 30 | 30 | 100 |
| 5 | 75 | 40 | 100 | 15 |
| 6 | 65 | 45 | 45 | 90 |
| 7 | 60 | 60 | 25 | 0 |
| 8 | 95 | 65 | 20 | 10 |
| 9 | 90 | 80 | 80 | 20 |
| 10 | 55 | 75 | 35 | 25 |
| 11 | 95 | 95 | 45 | 0 |
| 12 | 95 | 55 | 15 | 35 |
| 13 | 50 | 80 | 40 | 30 |
| 14 | 50 | 55 | 15 | 85 |
| 15 | 95 | 30 | 30 | 95 |
| 16 | 50 | 50 | 45 | 10 |
| 17 | 65 | 55 | 15 | 45 |
| 18 | 70 | 70 | 40 | 35 |
| 19 | 90 | 90 | 80 | 90 |
| att | rep | mid | fin | |
|---|---|---|---|---|
| 202212380 | 65 | 55 | 50 | 40 |
| 202212370 | 95 | 100 | 50 | 80 |
| 202212363 | 65 | 90 | 60 | 30 |
| 202212488 | 55 | 80 | 75 | 80 |
| 202212312 | 80 | 30 | 30 | 100 |
| 202212377 | 75 | 40 | 100 | 15 |
| 202212463 | 65 | 45 | 45 | 90 |
| 202212471 | 60 | 60 | 25 | 0 |
| 202212400 | 95 | 65 | 20 | 10 |
| 202212469 | 90 | 80 | 80 | 20 |
| 202212318 | 55 | 75 | 35 | 25 |
| 202212432 | 95 | 95 | 45 | 0 |
| 202212443 | 95 | 55 | 15 | 35 |
| 202212367 | 50 | 80 | 40 | 30 |
| 202212458 | 50 | 55 | 15 | 85 |
| 202212396 | 95 | 30 | 30 | 95 |
| 202212482 | 50 | 50 | 45 | 10 |
| 202212452 | 65 | 55 | 15 | 45 |
| 202212387 | 70 | 70 | 40 | 35 |
| 202212354 | 90 | 90 | 80 | 90 |
딕셔너리처럼
해싱으로 원하는 정보를 뽑으면 좋겠다!!(마치 딕셔너리처럼)
- 예제1: 출석점수를 출력
{'202212380': 65,
'202212370': 95,
'202212363': 65,
'202212488': 55,
'202212312': 80,
'202212377': 75,
'202212463': 65,
'202212471': 60,
'202212400': 95,
'202212469': 90,
'202212318': 55,
'202212432': 95,
'202212443': 95,
'202212367': 50,
'202212458': 50,
'202212396': 95,
'202212482': 50,
'202212452': 65,
'202212387': 70,
'202212354': 90}
202212380 65
202212370 95
202212363 65
202212488 55
202212312 80
202212377 75
202212463 65
202212471 60
202212400 95
202212469 90
202212318 55
202212432 95
202212443 95
202212367 50
202212458 50
202212396 95
202212482 50
202212452 65
202212387 70
202212354 90
Name: att, dtype: int64
- 예제2: 학번 202212380’의 출석점수 출력
리스트(or넘파이)처럼
인덱싱으로 정보를 뽑는 기능도 지원을 하면 좋겠다 (마치 리스트나 넘파이처럼)
- 예제1: 첫번째 학생의 기말고사 성적을 출력하고 싶다.
- 벼락치기: df에서 iloc이라는 특수기능을 이용하면 넘파이 인덱싱처럼 원소출력이 가능하다.
- 예제2: 홀수번째 학생의 점수를 뽑고 싶다.
array([[202212380, 65, 55, 50, 40],
[202212363, 65, 90, 60, 30],
[202212312, 80, 30, 30, 100],
[202212463, 65, 45, 45, 90],
[202212400, 95, 65, 20, 10],
[202212318, 55, 75, 35, 25],
[202212443, 95, 55, 15, 35],
[202212458, 50, 55, 15, 85],
[202212482, 50, 50, 45, 10],
[202212387, 70, 70, 40, 35]])
| att | rep | mid | fin | |
|---|---|---|---|---|
| 202212380 | 65 | 55 | 50 | 40 |
| 202212363 | 65 | 90 | 60 | 30 |
| 202212312 | 80 | 30 | 30 | 100 |
| 202212463 | 65 | 45 | 45 | 90 |
| 202212400 | 95 | 65 | 20 | 10 |
| 202212318 | 55 | 75 | 35 | 25 |
| 202212443 | 95 | 55 | 15 | 35 |
| 202212458 | 50 | 55 | 15 | 85 |
| 202212482 | 50 | 50 | 45 | 10 |
| 202212387 | 70 | 70 | 40 | 35 |
- 예제3: 맨 끝에서 3명의 점수를 출력하고 싶다.
array([[202212452, 65, 55, 15, 45],
[202212387, 70, 70, 40, 35],
[202212354, 90, 90, 80, 90]])
- 예제4: 맨 끝에서 3명의 점수중 마지막 2개의 칼럼만 출력하고 싶다.
다 되는거?
궁극: 해싱과 인덱싱을 모두 지원하는 아주 우수한 자료형을 만들고 싶음
- 예제1: 중간고사 점수가 20점 이상이면서 동시에 출석점수가 60점미만인 학생들의 기말고사 점수를 출력
(방법1) 데이터베이스 스타일
| att | rep | mid | fin | |
|---|---|---|---|---|
| 202212488 | 55 | 80 | 75 | 80 |
| 202212318 | 55 | 75 | 35 | 25 |
| 202212367 | 50 | 80 | 40 | 30 |
| 202212482 | 50 | 50 | 45 | 10 |
202212488 80
202212318 25
202212367 30
202212482 10
Name: fin, dtype: int64
(방법2) 넘파이 스타일이라면?
array([[202212380, 65, 55, 50, 40],
[202212370, 95, 100, 50, 80],
[202212363, 65, 90, 60, 30],
[202212488, 55, 80, 75, 80],
[202212312, 80, 30, 30, 100],
[202212377, 75, 40, 100, 15],
[202212463, 65, 45, 45, 90],
[202212471, 60, 60, 25, 0],
[202212400, 95, 65, 20, 10],
[202212469, 90, 80, 80, 20],
[202212318, 55, 75, 35, 25],
[202212432, 95, 95, 45, 0],
[202212443, 95, 55, 15, 35],
[202212367, 50, 80, 40, 30],
[202212458, 50, 55, 15, 85],
[202212396, 95, 30, 30, 95],
[202212482, 50, 50, 45, 10],
[202212452, 65, 55, 15, 45],
[202212387, 70, 70, 40, 35],
[202212354, 90, 90, 80, 90]])
array([ True, True, True, True, True, True, True, True, True,
True, True, True, False, True, False, True, True, False,
True, True])
array([False, False, False, True, False, False, False, False, False,
False, True, False, False, True, True, False, True, False,
False, False])
array([False, False, False, True, False, False, False, False, False,
False, True, False, False, True, False, False, True, False,
False, False])
note: test_ndarray[:,3] >= 20 & test_ndarray[:,1] < 60 와 같이 하면 에러가 난다. 조심하자!
array([80, 25, 30, 10])
- 구현난이도 어려움, 가독성 꽝
- 예제2: ’중간고사점수<기말고사점수’인 학생들의 출석점수 평균을 구하자.
판다스 공부 1단계
데이터프레임 선언
- 방법1: dictionary에서 만든다.
| att | mid | |
|---|---|---|
| 0 | 30 | 50 |
| 1 | 40 | 60 |
| 2 | 50 | 70 |
- 방법: 2차원 ndarray에서 만든다.
열의 이름 부여
- 방법1: 딕셔너리를 통하여 만들면 딕셔너리의 key가 자동으로 열의 이름이 된다.
| att | mid | |
|---|---|---|
| 0 | 30 | 50 |
| 1 | 40 | 60 |
| 2 | 50 | 70 |
- 방법2: pd.DataFrame()의 옵션에 columns를 이용
- 방법3: df.columns에 원하는 열이름을 덮어씀 (1)
- 방법4: df.columns에 원하는 열이름을 덮어씀 (2)
방법4가 방법3의 방식보다 컴퓨터가 이해하기 좋다. (= 불필요한 에러를 방지할 수 있다)
(Index(['X1', 'X2', 'X3'], dtype='object'), pandas.core.indexes.base.Index)
행의 이름 부여
- 방법1: 중첩 dict이면 nested dic의 key가 알아서 행의 이름으로 된다.
| att | mid | |
|---|---|---|
| guebin | 30 | 5 |
| iu | 40 | 45 |
| hynn | 50 | 90 |
- 방법2: pd.DataFrame()의 index 옵션 이용
| att | mid | |
|---|---|---|
| guebin | 30 | 5 |
| iu | 40 | 45 |
| hynn | 50 | 90 |
- 방법3: df.index에 덮어씌움
| att | mid | |
|---|---|---|
| guebin | 30 | 5 |
| iu | 40 | 45 |
| hynn | 50 | 90 |
- 방법4: df.set_index() 를 이용하여 덮어씌운다
(주의) 아래는 에러가 난다.
KeyError: "None of ['guebin', 'iu', 'hynn'] are in the columns"
자료형, len, shape, for문의 반복변수
- type
- len
- shape
- for문의 반복변수
pd.Series
- 2차원 ndarray가 pd.DataFrame에 대응한다면 1차원 ndarray는 pd.Series에 대응한다.
0 0.453758
1 -0.716270
2 -0.167750
3 0.089546
4 0.874006
5 0.401627
6 0.204911
7 1.042722
8 -0.352356
9 -1.241658
dtype: float64
판다스 공부 2단계
- 데이터
| att | rep | mid | fin | |
|---|---|---|---|---|
| 202212380 | 65 | 55 | 50 | 40 |
| 202212370 | 95 | 100 | 50 | 80 |
| 202212363 | 65 | 90 | 60 | 30 |
| 202212488 | 55 | 80 | 75 | 80 |
| 202212312 | 80 | 30 | 30 | 100 |
| 202212377 | 75 | 40 | 100 | 15 |
| 202212463 | 65 | 45 | 45 | 90 |
| 202212471 | 60 | 60 | 25 | 0 |
| 202212400 | 95 | 65 | 20 | 10 |
| 202212469 | 90 | 80 | 80 | 20 |
| 202212318 | 55 | 75 | 35 | 25 |
| 202212432 | 95 | 95 | 45 | 0 |
| 202212443 | 95 | 55 | 15 | 35 |
| 202212367 | 50 | 80 | 40 | 30 |
| 202212458 | 50 | 55 | 15 | 85 |
| 202212396 | 95 | 30 | 30 | 95 |
| 202212482 | 50 | 50 | 45 | 10 |
| 202212452 | 65 | 55 | 15 | 45 |
| 202212387 | 70 | 70 | 40 | 35 |
| 202212354 | 90 | 90 | 80 | 90 |
첫번째 칼럼을 선택
- 방법1
202212380 65
202212370 95
202212363 65
202212488 55
202212312 80
202212377 75
202212463 65
202212471 60
202212400 95
202212469 90
202212318 55
202212432 95
202212443 95
202212367 50
202212458 50
202212396 95
202212482 50
202212452 65
202212387 70
202212354 90
Name: att, dtype: int64
- 방법2: dict스타일
202212380 65
202212370 95
202212363 65
202212488 55
202212312 80
202212377 75
202212463 65
202212471 60
202212400 95
202212469 90
202212318 55
202212432 95
202212443 95
202212367 50
202212458 50
202212396 95
202212482 50
202212452 65
202212387 70
202212354 90
Name: att, dtype: int64
- 방법3: dict스타일
| att | |
|---|---|
| 202212380 | 65 |
| 202212370 | 95 |
| 202212363 | 65 |
| 202212488 | 55 |
| 202212312 | 80 |
| 202212377 | 75 |
| 202212463 | 65 |
| 202212471 | 60 |
| 202212400 | 95 |
| 202212469 | 90 |
| 202212318 | 55 |
| 202212432 | 95 |
| 202212443 | 95 |
| 202212367 | 50 |
| 202212458 | 50 |
| 202212396 | 95 |
| 202212482 | 50 |
| 202212452 | 65 |
| 202212387 | 70 |
| 202212354 | 90 |
- df.att 나 df[‘att’]는 series를 리턴하고 df[[‘att’]]는 dataframe을 리턴한다.
- 방법4: ndarray스타일
202212380 65
202212370 95
202212363 65
202212488 55
202212312 80
202212377 75
202212463 65
202212471 60
202212400 95
202212469 90
202212318 55
202212432 95
202212443 95
202212367 50
202212458 50
202212396 95
202212482 50
202212452 65
202212387 70
202212354 90
Name: att, dtype: int64
- 방법5: ndarray스타일
| att | |
|---|---|
| 202212380 | 65 |
| 202212370 | 95 |
| 202212363 | 65 |
| 202212488 | 55 |
| 202212312 | 80 |
| 202212377 | 75 |
| 202212463 | 65 |
| 202212471 | 60 |
| 202212400 | 95 |
| 202212469 | 90 |
| 202212318 | 55 |
| 202212432 | 95 |
| 202212443 | 95 |
| 202212367 | 50 |
| 202212458 | 50 |
| 202212396 | 95 |
| 202212482 | 50 |
| 202212452 | 65 |
| 202212387 | 70 |
| 202212354 | 90 |
- df.iloc[:,0]은 series를 리턴하고 df.iloc[:,[0]]은 dataframe을 리턴한다.
- 방법6: ndarray 스타일과 dict 스타일의 혼합
202212380 65
202212370 95
202212363 65
202212488 55
202212312 80
202212377 75
202212463 65
202212471 60
202212400 95
202212469 90
202212318 55
202212432 95
202212443 95
202212367 50
202212458 50
202212396 95
202212482 50
202212452 65
202212387 70
202212354 90
Name: att, dtype: int64
- 방법7: ndarray 스타일과 dict 스타일의 혼합
| att | |
|---|---|
| 202212380 | 65 |
| 202212370 | 95 |
| 202212363 | 65 |
| 202212488 | 55 |
| 202212312 | 80 |
| 202212377 | 75 |
| 202212463 | 65 |
| 202212471 | 60 |
| 202212400 | 95 |
| 202212469 | 90 |
| 202212318 | 55 |
| 202212432 | 95 |
| 202212443 | 95 |
| 202212367 | 50 |
| 202212458 | 50 |
| 202212396 | 95 |
| 202212482 | 50 |
| 202212452 | 65 |
| 202212387 | 70 |
| 202212354 | 90 |
- df.loc[:,‘att’]은 series를 리턴하고 df.loc[:,[‘att’]]은 dataframe을 리턴한다.
- 방법7: nparray 스타일 + bool 인덱싱
| att | |
|---|---|
| 202212380 | 65 |
| 202212370 | 95 |
| 202212363 | 65 |
| 202212488 | 55 |
| 202212312 | 80 |
| 202212377 | 75 |
| 202212463 | 65 |
| 202212471 | 60 |
| 202212400 | 95 |
| 202212469 | 90 |
| 202212318 | 55 |
| 202212432 | 95 |
| 202212443 | 95 |
| 202212367 | 50 |
| 202212458 | 50 |
| 202212396 | 95 |
| 202212482 | 50 |
| 202212452 | 65 |
| 202212387 | 70 |
| 202212354 | 90 |
- 방법8: ndarray와 dict의 홉합형 + bool 인덱싱
여러개의 칼럼을 선택
- 방법1: dict 스타일
| att | fin | |
|---|---|---|
| 202212380 | 65 | 40 |
| 202212370 | 95 | 80 |
| 202212363 | 65 | 30 |
| 202212488 | 55 | 80 |
| 202212312 | 80 | 100 |
| 202212377 | 75 | 15 |
| 202212463 | 65 | 90 |
| 202212471 | 60 | 0 |
| 202212400 | 95 | 10 |
| 202212469 | 90 | 20 |
| 202212318 | 55 | 25 |
| 202212432 | 95 | 0 |
| 202212443 | 95 | 35 |
| 202212367 | 50 | 30 |
| 202212458 | 50 | 85 |
| 202212396 | 95 | 95 |
| 202212482 | 50 | 10 |
| 202212452 | 65 | 45 |
| 202212387 | 70 | 35 |
| 202212354 | 90 | 90 |
- 방법2: ndarray 스타일 (정수리스트로 인덱싱, 슬라이싱, 스트라이딩)
| att | rep | |
|---|---|---|
| 202212380 | 65 | 55 |
| 202212370 | 95 | 100 |
| 202212363 | 65 | 90 |
| 202212488 | 55 | 80 |
| 202212312 | 80 | 30 |
| 202212377 | 75 | 40 |
| 202212463 | 65 | 45 |
| 202212471 | 60 | 60 |
| 202212400 | 95 | 65 |
| 202212469 | 90 | 80 |
| 202212318 | 55 | 75 |
| 202212432 | 95 | 95 |
| 202212443 | 95 | 55 |
| 202212367 | 50 | 80 |
| 202212458 | 50 | 55 |
| 202212396 | 95 | 30 |
| 202212482 | 50 | 50 |
| 202212452 | 65 | 55 |
| 202212387 | 70 | 70 |
| 202212354 | 90 | 90 |
| att | rep | |
|---|---|---|
| 202212380 | 65 | 55 |
| 202212370 | 95 | 100 |
| 202212363 | 65 | 90 |
| 202212488 | 55 | 80 |
| 202212312 | 80 | 30 |
| 202212377 | 75 | 40 |
| 202212463 | 65 | 45 |
| 202212471 | 60 | 60 |
| 202212400 | 95 | 65 |
| 202212469 | 90 | 80 |
| 202212318 | 55 | 75 |
| 202212432 | 95 | 95 |
| 202212443 | 95 | 55 |
| 202212367 | 50 | 80 |
| 202212458 | 50 | 55 |
| 202212396 | 95 | 30 |
| 202212482 | 50 | 50 |
| 202212452 | 65 | 55 |
| 202212387 | 70 | 70 |
| 202212354 | 90 | 90 |
| att | rep | |
|---|---|---|
| 202212380 | 65 | 55 |
| 202212370 | 95 | 100 |
| 202212363 | 65 | 90 |
| 202212488 | 55 | 80 |
| 202212312 | 80 | 30 |
| 202212377 | 75 | 40 |
| 202212463 | 65 | 45 |
| 202212471 | 60 | 60 |
| 202212400 | 95 | 65 |
| 202212469 | 90 | 80 |
| 202212318 | 55 | 75 |
| 202212432 | 95 | 95 |
| 202212443 | 95 | 55 |
| 202212367 | 50 | 80 |
| 202212458 | 50 | 55 |
| 202212396 | 95 | 30 |
| 202212482 | 50 | 50 |
| 202212452 | 65 | 55 |
| 202212387 | 70 | 70 |
| 202212354 | 90 | 90 |
| att | mid | |
|---|---|---|
| 202212380 | 65 | 50 |
| 202212370 | 95 | 50 |
| 202212363 | 65 | 60 |
| 202212488 | 55 | 75 |
| 202212312 | 80 | 30 |
| 202212377 | 75 | 100 |
| 202212463 | 65 | 45 |
| 202212471 | 60 | 25 |
| 202212400 | 95 | 20 |
| 202212469 | 90 | 80 |
| 202212318 | 55 | 35 |
| 202212432 | 95 | 45 |
| 202212443 | 95 | 15 |
| 202212367 | 50 | 40 |
| 202212458 | 50 | 15 |
| 202212396 | 95 | 30 |
| 202212482 | 50 | 45 |
| 202212452 | 65 | 15 |
| 202212387 | 70 | 40 |
| 202212354 | 90 | 80 |
- 방법3: ndarray 와 dict의 혼합형
| att | mid | |
|---|---|---|
| 202212380 | 65 | 50 |
| 202212370 | 95 | 50 |
| 202212363 | 65 | 60 |
| 202212488 | 55 | 75 |
| 202212312 | 80 | 30 |
| 202212377 | 75 | 100 |
| 202212463 | 65 | 45 |
| 202212471 | 60 | 25 |
| 202212400 | 95 | 20 |
| 202212469 | 90 | 80 |
| 202212318 | 55 | 35 |
| 202212432 | 95 | 45 |
| 202212443 | 95 | 15 |
| 202212367 | 50 | 40 |
| 202212458 | 50 | 15 |
| 202212396 | 95 | 30 |
| 202212482 | 50 | 45 |
| 202212452 | 65 | 15 |
| 202212387 | 70 | 40 |
| 202212354 | 90 | 80 |
| att | rep | mid | |
|---|---|---|---|
| 202212380 | 65 | 55 | 50 |
| 202212370 | 95 | 100 | 50 |
| 202212363 | 65 | 90 | 60 |
| 202212488 | 55 | 80 | 75 |
| 202212312 | 80 | 30 | 30 |
| 202212377 | 75 | 40 | 100 |
| 202212463 | 65 | 45 | 45 |
| 202212471 | 60 | 60 | 25 |
| 202212400 | 95 | 65 | 20 |
| 202212469 | 90 | 80 | 80 |
| 202212318 | 55 | 75 | 35 |
| 202212432 | 95 | 95 | 45 |
| 202212443 | 95 | 55 | 15 |
| 202212367 | 50 | 80 | 40 |
| 202212458 | 50 | 55 | 15 |
| 202212396 | 95 | 30 | 30 |
| 202212482 | 50 | 50 | 45 |
| 202212452 | 65 | 55 | 15 |
| 202212387 | 70 | 70 | 40 |
| 202212354 | 90 | 90 | 80 |
| rep | mid | fin | |
|---|---|---|---|
| 202212380 | 55 | 50 | 40 |
| 202212370 | 100 | 50 | 80 |
| 202212363 | 90 | 60 | 30 |
| 202212488 | 80 | 75 | 80 |
| 202212312 | 30 | 30 | 100 |
| 202212377 | 40 | 100 | 15 |
| 202212463 | 45 | 45 | 90 |
| 202212471 | 60 | 25 | 0 |
| 202212400 | 65 | 20 | 10 |
| 202212469 | 80 | 80 | 20 |
| 202212318 | 75 | 35 | 25 |
| 202212432 | 95 | 45 | 0 |
| 202212443 | 55 | 15 | 35 |
| 202212367 | 80 | 40 | 30 |
| 202212458 | 55 | 15 | 85 |
| 202212396 | 30 | 30 | 95 |
| 202212482 | 50 | 45 | 10 |
| 202212452 | 55 | 15 | 45 |
| 202212387 | 70 | 40 | 35 |
| 202212354 | 90 | 80 | 90 |
- 방법4: bool을 이용한 인덱싱
| att | mid | |
|---|---|---|
| 202212380 | 65 | 50 |
| 202212370 | 95 | 50 |
| 202212363 | 65 | 60 |
| 202212488 | 55 | 75 |
| 202212312 | 80 | 30 |
| 202212377 | 75 | 100 |
| 202212463 | 65 | 45 |
| 202212471 | 60 | 25 |
| 202212400 | 95 | 20 |
| 202212469 | 90 | 80 |
| 202212318 | 55 | 35 |
| 202212432 | 95 | 45 |
| 202212443 | 95 | 15 |
| 202212367 | 50 | 40 |
| 202212458 | 50 | 15 |
| 202212396 | 95 | 30 |
| 202212482 | 50 | 45 |
| 202212452 | 65 | 15 |
| 202212387 | 70 | 40 |
| 202212354 | 90 | 80 |
| att | mid | |
|---|---|---|
| 202212380 | 65 | 50 |
| 202212370 | 95 | 50 |
| 202212363 | 65 | 60 |
| 202212488 | 55 | 75 |
| 202212312 | 80 | 30 |
| 202212377 | 75 | 100 |
| 202212463 | 65 | 45 |
| 202212471 | 60 | 25 |
| 202212400 | 95 | 20 |
| 202212469 | 90 | 80 |
| 202212318 | 55 | 35 |
| 202212432 | 95 | 45 |
| 202212443 | 95 | 15 |
| 202212367 | 50 | 40 |
| 202212458 | 50 | 15 |
| 202212396 | 95 | 30 |
| 202212482 | 50 | 45 |
| 202212452 | 65 | 15 |
| 202212387 | 70 | 40 |
| 202212354 | 90 | 80 |
첫번째 행을 선택
- 방법1
- 방법2
- 방법3
- 방법4
- 방법5
- 방법6
- 방법7
- 방법8
- 방법9
여러개의 행을 선택
- 방법1
- 방법2
- 그 밖의 방법들
| att | rep | mid | fin | |
|---|---|---|---|---|
| 202212380 | 65 | 55 | 50 | 40 |
| 202212488 | 55 | 80 | 75 | 80 |
| 202212463 | 65 | 45 | 45 | 90 |
| 202212469 | 90 | 80 | 80 | 20 |
| 202212443 | 95 | 55 | 15 | 35 |
| 202212396 | 95 | 30 | 30 | 95 |
| 202212387 | 70 | 70 | 40 | 35 |
| att | rep | mid | fin | |
|---|---|---|---|---|
| 202212380 | 65 | 55 | 50 | 40 |
| 202212370 | 95 | 100 | 50 | 80 |
| 202212363 | 65 | 90 | 60 | 30 |
| 202212488 | 55 | 80 | 75 | 80 |
| 202212312 | 80 | 30 | 30 | 100 |
| att | rep | mid | fin | |
|---|---|---|---|---|
| 202212380 | 65 | 55 | 50 | 40 |
| 202212370 | 95 | 100 | 50 | 80 |
| 202212363 | 65 | 90 | 60 | 30 |
| 202212488 | 55 | 80 | 75 | 80 |
| 202212312 | 80 | 30 | 30 | 100 |
| rep | mid | fin | |
|---|---|---|---|
| 202212380 | 55 | 50 | 40 |
| 202212363 | 90 | 60 | 30 |
| 202212488 | 80 | 75 | 80 |
| 202212377 | 40 | 100 | 15 |
| 202212463 | 45 | 45 | 90 |
| 202212471 | 60 | 25 | 0 |
| 202212318 | 75 | 35 | 25 |
| 202212367 | 80 | 40 | 30 |
| 202212458 | 55 | 15 | 85 |
| 202212482 | 50 | 45 | 10 |
| 202212452 | 55 | 15 | 45 |
| 202212387 | 70 | 40 | 35 |
| rep | mid | fin | |
|---|---|---|---|
| 202212380 | 55 | 50 | 40 |
| 202212363 | 90 | 60 | 30 |
| 202212488 | 80 | 75 | 80 |
| 202212377 | 40 | 100 | 15 |
| 202212463 | 45 | 45 | 90 |
| 202212471 | 60 | 25 | 0 |
| 202212318 | 75 | 35 | 25 |
| 202212367 | 80 | 40 | 30 |
| 202212458 | 55 | 15 | 85 |
| 202212482 | 50 | 45 | 10 |
| 202212452 | 55 | 15 | 45 |
| 202212387 | 70 | 40 | 35 |
| rep | mid | fin | |
|---|---|---|---|
| 202212380 | 55 | 50 | 40 |
| 202212363 | 90 | 60 | 30 |
| 202212488 | 80 | 75 | 80 |
| 202212377 | 40 | 100 | 15 |
| 202212463 | 45 | 45 | 90 |
| 202212471 | 60 | 25 | 0 |
| 202212318 | 75 | 35 | 25 |
| 202212367 | 80 | 40 | 30 |
| 202212458 | 55 | 15 | 85 |
| 202212482 | 50 | 45 | 10 |
| 202212452 | 55 | 15 | 45 |
| 202212387 | 70 | 40 | 35 |
- 아래는 에러가 난다 주의!
query (\(\star\))
- 예제1
- 예제2
| att | rep | mid | fin | |
|---|---|---|---|---|
| 202212370 | 95 | 100 | 50 | 80 |
| 202212488 | 55 | 80 | 75 | 80 |
| 202212458 | 50 | 55 | 15 | 85 |
- 예제3
- 예제4
| att | rep | mid | fin | |
|---|---|---|---|---|
| 202212488 | 55 | 80 | 75 | 80 |
| 202212312 | 80 | 30 | 30 | 100 |
| 202212463 | 65 | 45 | 45 | 90 |
| 202212452 | 65 | 55 | 15 | 45 |
| 202212354 | 90 | 90 | 80 | 90 |
- 예제5
| att | rep | mid | fin | |
|---|---|---|---|---|
| 202212370 | 95 | 100 | 50 | 80 |
| 202212488 | 55 | 80 | 75 | 80 |
| 202212312 | 80 | 30 | 30 | 100 |
| 202212463 | 65 | 45 | 45 | 90 |
| 202212396 | 95 | 30 | 30 | 95 |
| 202212354 | 90 | 90 | 80 | 90 |
- 예제6
| att | rep | mid | fin | |
|---|---|---|---|---|
| 202212370 | 95 | 100 | 50 | 80 |
| 202212312 | 80 | 30 | 30 | 100 |
| 202212377 | 75 | 40 | 100 | 15 |
| 202212400 | 95 | 65 | 20 | 10 |
| 202212469 | 90 | 80 | 80 | 20 |
| 202212432 | 95 | 95 | 45 | 0 |
| 202212443 | 95 | 55 | 15 | 35 |
| 202212396 | 95 | 30 | 30 | 95 |
| 202212354 | 90 | 90 | 80 | 90 |
| att | rep | mid | fin | |
|---|---|---|---|---|
| 202212370 | 95 | 100 | 50 | 80 |
| 202212312 | 80 | 30 | 30 | 100 |
| 202212377 | 75 | 40 | 100 | 15 |
| 202212400 | 95 | 65 | 20 | 10 |
| 202212469 | 90 | 80 | 80 | 20 |
| 202212432 | 95 | 95 | 45 | 0 |
| 202212443 | 95 | 55 | 15 | 35 |
| 202212396 | 95 | 30 | 30 | 95 |
| 202212354 | 90 | 90 | 80 | 90 |
- 예제7
| att | rep | mid | fin | |
|---|---|---|---|---|
| 202212380 | 65 | 55 | 50 | 40 |
| 202212370 | 95 | 100 | 50 | 80 |
| 202212363 | 65 | 90 | 60 | 30 |
| 202212488 | 55 | 80 | 75 | 80 |
| 202212312 | 80 | 30 | 30 | 100 |
| 202212377 | 75 | 40 | 100 | 15 |
| 202212463 | 65 | 45 | 45 | 90 |
| 202212471 | 60 | 60 | 25 | 0 |
| 202212400 | 95 | 65 | 20 | 10 |
| 202212469 | 90 | 80 | 80 | 20 |
| 202212318 | 55 | 75 | 35 | 25 |
| 202212432 | 95 | 95 | 45 | 0 |
| 202212443 | 95 | 55 | 15 | 35 |
| 202212367 | 50 | 80 | 40 | 30 |
| 202212458 | 50 | 55 | 15 | 85 |
| 202212396 | 95 | 30 | 30 | 95 |
| 202212482 | 50 | 50 | 45 | 10 |
| 202212452 | 65 | 55 | 15 | 45 |
| 202212387 | 70 | 70 | 40 | 35 |
| 202212354 | 90 | 90 | 80 | 90 |
| att | rep | mid | fin | |
|---|---|---|---|---|
| 202212312 | 80 | 30 | 30 | 100 |
| 202212318 | 55 | 75 | 35 | 25 |
| 202212387 | 70 | 70 | 40 | 35 |
| 202212354 | 90 | 90 | 80 | 90 |
사실 이 기능은 시계열자료에서 꽃핀다.
- 예제8
DatetimeIndex(['2021-12-26', '2021-12-27', '2021-12-28', '2021-12-29',
'2021-12-30', '2021-12-31', '2022-01-01', '2022-01-02',
'2022-01-03', '2022-01-04'],
dtype='datetime64[ns]', freq='D')
_df=pd.DataFrame(np.random.normal(size=(10,4)),columns=list('ABCD'),index=pd.date_range('20211226',periods=10))
_df| A | B | C | D | |
|---|---|---|---|---|
| 2021-12-26 | -0.367399 | 0.925727 | -0.378494 | -1.597765 |
| 2021-12-27 | -0.016530 | 1.041946 | 1.511319 | -0.970646 |
| 2021-12-28 | -1.556636 | 1.629024 | -0.965807 | 0.309184 |
| 2021-12-29 | 0.554734 | 0.712753 | 0.769650 | 0.277420 |
| 2021-12-30 | -0.897457 | 0.110547 | 1.026816 | 0.294377 |
| 2021-12-31 | 0.904037 | -0.809864 | 0.473510 | -0.047875 |
| 2022-01-01 | -0.850946 | -0.915568 | -1.549329 | -0.040507 |
| 2022-01-02 | 0.054391 | -0.732693 | 0.409205 | -1.165549 |
| 2022-01-03 | 0.053472 | 0.800553 | -0.040499 | -0.447199 |
| 2022-01-04 | -0.304462 | 1.257485 | 0.888741 | 0.615561 |
| A | B | C | D | |
|---|---|---|---|---|
| 2021-12-29 | 0.554734 | 0.712753 | 0.769650 | 0.277420 |
| 2021-12-30 | -0.897457 | 0.110547 | 1.026816 | 0.294377 |
| 2021-12-31 | 0.904037 | -0.809864 | 0.473510 | -0.047875 |
| 2022-01-01 | -0.850946 | -0.915568 | -1.549329 | -0.040507 |
| 2022-01-02 | 0.054391 | -0.732693 | 0.409205 | -1.165549 |
| 2022-01-03 | 0.053472 | 0.800553 | -0.040499 | -0.447199 |
| A | B | C | D | |
|---|---|---|---|---|
| 2021-12-30 | -0.897457 | 0.110547 | 1.026816 | 0.294377 |
| 2021-12-31 | 0.904037 | -0.809864 | 0.473510 | -0.047875 |
| 2022-01-01 | -0.850946 | -0.915568 | -1.549329 | -0.040507 |
| 2022-01-02 | 0.054391 | -0.732693 | 0.409205 | -1.165549 |
- query가 만능은 아니다.
판다스 공부 3단계
전치
합
cumsum
형태변환
Quiz
- 아래의 데이터프레임에서 1,3번째 열을 추출하라.