[Pandas]내가 보려고 올린 Pandas 정리3

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!


데이터 프레임 인덱서

# 모듈 import
import numpy as np
import pandas as pd

설정변경코드

  • 변수 명이 두 번 이상 출력되어도 모두 콘솔에서 보여줄 것
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity="all"

데이터 프레임 인덱서 : loc, iloc

  • pandas는 numpy행렬과 같이 쉼표를 사용한 (행 인덱스, 열 인덱스) 형식의 2차원 인덱싱을 지원
    • 특별한 인덱서(indexer) 속성을 제공
  • loc : 라벨값 기반의 2차원 인덱싱
  • iloc : 순서를 나타내는 정수 기반의 2차원 인덱싱

데이터프레임 인덱싱

  1. 열인덱싱

    • 하나의 열만 선택 : df[‘열이름’]
    • 여러개 열 선택 : df[[‘열이름1’,’열이름2’,…]]
  2. 행인덱싱 : 연속된 구간의 행데이터 선택(슬라이싱)

    • df[‘행_시작위치’ : ‘행_끝위치’] :
  3. 개별요소 접근 : 선택한 열에서 지정된 구간의 행데이터 선택

    • df[‘열이름’][‘행_시작위치’:’행_끝위치’]
    • df[‘열이름’][‘시작_행이름’:’끝_행이름’]

=> 행과 열을 동시에 인덱싱 하는 구조는 기본 자료구조 인덱스와 차이가 있음

데이터 프레임에서 인덱서 사용

loc, iloc 속성을 사용하는 인덱싱

  • pandas 패키지는 [행번호,열번호] 인덱싱 불가

  • iloc 속성 사용하면 가능

    • iloc[행번호,열번호] : 가능
    • loc[행제목,열제목] : 가능

1. loc 인덱서(행 우선 인덱서)

  • df.loc[행인덱싱 값] # 행우선 인덱서
  • df.loc[행인덱싱

인덱싱 값

  1. 인덱스 데이터 : (index name, column name)
  2. 인덱스 데이터 슬라이스
  3. 같은 행 인덱스를 갖는 불리언 시리즈(행 인덱싱인 경우)
    • 조건으로 추출 가능
  4. 위 값을 반환하는 함수
  • 예제 df 생성
    10 ~ 21 범위의 숫자를 생성 후 3행 4열로 배치
# 예제 데이터프레임 생성
df = pd.DataFrame(np.arange(10,22).reshape(3,4),
                 index = 'a b c'.split(),
                 columns = ['A','B','C','D'])
문제1. 행우선 인덱서 이므로 a행 모든 열을 추출하시오.
# loc 인덱서 : 인덱싱 값을 하나만 받는 경우
df.loc['a']

# 출력결과 : 시리즈로 반환
A    10
B    11
C    12
D    13
Name: a, dtype: int32
  • loc 인덱서에서는 열 단독 인덱싱은 불가능 함

행이름 문자열 라벨 슬라이싱

  • dataFrame.loc[처음문자열제목 : 끝문자열제목]

b행부터 c행의 모든 열 변환

df.loc['b':'c']
A B C D
b 14 15 16 17
c 18 19 20 21
# 위와 결과가 같음
df['b':'c']
A B C D
b 14 15 16 17
c 18 19 20 21
# b행을 출력 : 시리즈 형태
df.loc['b']
A    14
B    15
C    16
D    17
Name: b, dtype: int32
# b행을 출력: :  df 형태
df.loc[['b']]
A B C D
b 14 15 16 17

*참고 : 데이터프레임 기본 인덱싱 => 열기준

# df[['b','c']]
# 오류가 난다.

=> b와 c를 컬렴명에서 찾고 있음, 인덱서 사용해야 함

# 컬럼명에 B,C가 존재
df[['B','C']]
B C
a 11 12
b 15 16
c 19 20

boolean selection으로 row 선택하기

  • 데이터베이스와 같은 인덱스를 가지는 boolean selection을 행을 선택하는 인덱싱 값으로 쓸 수 있음
    • 조건 식 수행
df
A B C D
a 10 11 12 13
b 14 15 16 17
c 18 19 20 21
df.A > 15
a    False
b    False
c     True
Name: A, dtype: bool
df.loc[df.A>15]
A B C D
c 18 19 20 21
df[df.A >  15]
A B C D
c 18 19 20 21
  • 인덱스 대신 인덱스 값을 반환하는 함수 사용
# 함수 작성
def sel_row(df):
    return df.A > 15

# True 나 False가 반환
# 함수 호출 인덱싱
sel_row(df)
a    False
b    False
c     True
Name: A, dtype: bool
df.loc[sel_row(df)]
A B C D
c 18 19 20 21

loc 인덱서 슬라이싱

# 예제 df 생성
df2 = pd.DataFrame(np.arange(10,26).reshape(4,4),
                  columns = 'a b c d'.split())
df2
# 행 인덱스를 지정하지 않아서 0부터 1씩 증가되는 정수 인덱스 자동 생성
a b c d
0 10 11 12 13
1 14 15 16 17
2 18 19 20 21
3 22 23 24 25
# 값 인덱싱 - 슬라이싱 초기값:끝값
df2.loc[1:2]
a b c d
1 14 15 16 17
2 18 19 20 21
# 위치 인덱싱 - 슬라이싱 초기위치:끝위치 + 1
df2[1:2]
a b c d
1 14 15 16 17

loc 인덱서 사용 요소 값 접근

  • 인덱싱으로 행과 열을 모두 받는 경우
  • 문법 : df.loc[행인덱스,열인덱스] - 라벨(문자열)인덱스 사용
df
A B C D
a 10 11 12 13
b 14 15 16 17
c 18 19 20 21
  • a행의 A열 값을 접근해서 출력
# a행의 A열
df.loc['a','A']
10
  • a행의 A열 값 수정
# loc을 사용한 원소값 변경
# df.loc[행,열] = 값
df.loc['a','A'] = 50
df
A B C D
a 50 11 12 13
b 14 15 16 17
c 18 19 20 21

loc 인덱서 어쩌구

  1. a행의 모든 열을 반환하시오.
df.loc['a'] # 시리즈로 반환
A    50
B    11
C    12
D    13
Name: a, dtype: int32
df.loc['a',:] # 시리즈로 반환
A    50
B    11
C    12
D    13
Name: a, dtype: int32
df.loc[['a']] # 데이터 프레임으로 반환
A B C D
a 50 11 12 13
df[:'a'] # 데이터 프레임로 반환
A B C D
a 50 11 12 13
  1. a행의 B,C 열을 반환하시오.
# 시리즈로 반환 - 열에 해당하는 인덱싱을 슬라이싱 처리함.
df
df.loc['a','B':'C']
A B C D
a 50 11 12 13
b 14 15 16 17
c 18 19 20 21
B    11
C    12
Name: a, dtype: int32
  1. b행부터 모든 행의 A열을 반환하시오.
# b행부터 모든 행의 A열
df.loc['b':,'A']
# 시리즈 형태 반환
b    14
c    18
Name: A, dtype: int32
  1. a,b행의 B,D열을 데이터프레임으로 반환하시오.
df
A B C D
a 50 11 12 13
b 14 15 16 17
c 18 19 20 21
# a,b행의 모든 열 df 형태로 반환
df.loc['a':'b']
A B C D
a 50 11 12 13
b 14 15 16 17
# a,b행의 B열을 시리즈로 반환
df.loc['a':'b','B']
a    11
b    15
Name: B, dtype: int32
# a,b행의 B,D열을 데이터프레임으로 반환
df.loc['a':'b',['B','D']]
df.loc[['a','b'],['B','D']]
B D
a 11 13
b 15 17
B D
a 11 13
b 15 17
  1. a,c 행의 B,D 열을 반환하시오.
df.loc[['a','c'],['B','D']]
B D
a 11 13
c 19 21

2. iloc 인덱서(위치 인덱스)

  • 라벨(name)이 아닌 위치를 나타내는 정수 인덱스만 받는다.
  • 위치 정수값은 0부터 시작
  • 데이터프레임.iloc[행,열]
df
A B C D
a 50 11 12 13
b 14 15 16 17
c 18 19 20 21
  • 0행 1열 선택
# 0행 1열
df.iloc[0,1]
11
  • 1열의 0행, 1행 선택 : 데이터프레임 형태로 반환
# 0행 1열 : df 형태로 반환-슬라이싱 사용
df.iloc[0:2, 1:2]
B
a 11
b 15
  • 1열의 0행, 1행 선택 : 시리즈 형태로 반환
# 0행 1열 : 시리즈 형태로 반환 - 슬라이싱, 위치값 사용
df.iloc[0:2,1]
a    11
b    15
Name: B, dtype: int32
  • 0행의 2번째 열부터 끝열까지 반환
# 0행의 2번째 열부터 끝열까지 반환(시리즈)
df.iloc[0, 2:]
# 0행의 끝에서 두번째 열부터(시리즈)
df.iloc[0, -2:]
# (데이터프레임)
df.iloc[0:1,-2:]
C    12
D    13
Name: a, dtype: int32






C    12
D    13
Name: a, dtype: int32
C D
a 12 13
  • iloc[행위치,열위치] -> 원소값 반환
  • iloc[행위치1:행위치2,열위치1:열위치2] -> 원소 반환: df 반환
  • iloc[행위치,열위치1:열위치2] -> 원소반환 :시리즈 반환
  • iloc[행위치1:행위치2,열위치]->원소반환 : 시리즈 반환

연습문제

  1. 모든 행과 열에 라벨을 가지는 5:5 이상 크기의 데이터 프레임을 만든다.
    • 최대한 간단한 코드로 작성-np의 난수 발생 함수 이용
  2. 10가지 이상의 방법으로 특정한 행과 열을 추출해 볼 것
    • 2번 작업을 진행하면서 주석으로 추출하는 내용을 정리 할 것
  • 25, 50 범위의 숫자를 생성 후 5행 5열로 배치
import random
dfp = pd.DataFrame(np.arange(25, 50).reshape(5,5), 
                   index = 'a b c d e'.split(),
                  columns = 'A B C D E'.split())
dfp
A B C D E
a 25 26 27 28 29
b 30 31 32 33 34
c 35 36 37 38 39
d 40 41 42 43 44
e 45 46 47 48 49
# A열 추출
dfp['A'] # 시리즈형태
dfp.loc[:]['A'] # 시리즈형태
dfp.loc[:,:'A'] # 데이터프레임 형태
dfp.iloc[:,:1] # 데이터프레임 형태
dfp.iloc[:,0] # 시리즈형태
a    25
b    30
c    35
d    40
e    45
Name: A, dtype: int32






a    25
b    30
c    35
d    40
e    45
Name: A, dtype: int32
A
a 25
b 30
c 35
d 40
e 45
A
a 25
b 30
c 35
d 40
e 45
a    25
b    30
c    35
d    40
e    45
Name: A, dtype: int32
# 0행 부터 2행 까지 추출
dfp.iloc[:3]
dfp.iloc[:3, :]
A B C D E
a 25 26 27 28 29
b 30 31 32 33 34
c 35 36 37 38 39
A B C D E
a 25 26 27 28 29
b 30 31 32 33 34
c 35 36 37 38 39
# 1행의 3,4열 추출
dfp.iloc[1, 3:] # 시리즈 형태
dfp.iloc[1:2, 3:5] # 데이터프레임 형태
dfp.iloc[[1],[3,4]] # 데이터프레임 형태
dfp[['D','E']][1:2] # 데이터프레임 형태
D    33
E    34
Name: b, dtype: int32
D E
b 33 34
D E
b 33 34
D E
b 33 34
# a행에서 c행까지 중 B열과 D열 추출
dfp.iloc[0:3, [1,3]] # 데이터 프레임 형태
dfp.iloc[:3, [1,3]] # 데이터 프레임 형태
dfp.loc[['a','b','c'], ['B','D']] # 데이터 프레임 형태
dfp.loc['a':'c', ['B','D']] # 데이터 프레임 형태
B D
a 26 28
b 31 33
c 36 38
B D
a 26 28
b 31 33
c 36 38
B D
a 26 28
b 31 33
c 36 38
B D
a 26 28
b 31 33
c 36 38

2022

[web]jQuery 복습 3

2 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]jQuery 복습 2

11 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]jQuery 복습 1

16 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]JavaScript 정리4

6 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]JavaScript 정리3

6 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]JavaScript 정리2

6 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]JavaScript 정리1

7 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]CSS 기초 정리

9 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]HTML 기초 정리

2 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[Pandas]pandas 연습

3 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

맨 위로 이동 ↑

2021

[Python기초]module

1 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

맨 위로 이동 ↑