Python Pandas-데이터 인덱싱 및 선택
이 장에서는 날짜를 슬라이스하고 주사위를 던지고 일반적으로 pandas 객체의 하위 집합을 가져 오는 방법에 대해 설명합니다.
Python 및 NumPy 인덱싱 연산자 "[]"및 속성 연산자 "." 광범위한 사용 사례에서 Pandas 데이터 구조에 빠르고 쉽게 액세스 할 수 있습니다. 그러나 접근 할 데이터의 유형을 미리 알 수 없기 때문에 표준 연산자를 직접 사용하면 최적화 한계가 있습니다. 프로덕션 코드의 경우이 장에서 설명하는 최적화 된 pandas 데이터 액세스 방법을 활용하는 것이 좋습니다.
Pandas는 이제 세 가지 유형의 다중 축 인덱싱을 지원합니다. 다음 표에는 세 가지 유형이 나와 있습니다.
Sr. 아니요 | 인덱싱 및 설명 |
---|---|
1 | .loc() 라벨 기반 |
2 | .iloc() 정수 기반 |
삼 | .ix() 레이블 및 정수 기반 |
.loc ()
Pandas는 순수하게 가질 수있는 다양한 방법을 제공합니다. label based indexing. 슬라이싱 할 때 시작 경계도 포함됩니다. 정수는 유효한 레이블이지만 위치가 아닌 레이블을 참조합니다.
.loc() 다음과 같은 여러 액세스 방법이 있습니다.
- 단일 스칼라 레이블
- 라벨 목록
- 슬라이스 객체
- 부울 배열
loc','로 구분 된 두 개의 단일 / 목록 / 범위 연산자를 사용합니다. 첫 번째는 행을 나타내고 두 번째는 열을 나타냅니다.
예 1
#import the pandas library and aliasing as pd
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(8, 4),
index = ['a','b','c','d','e','f','g','h'], columns = ['A', 'B', 'C', 'D'])
#select all rows for a specific column
print df.loc[:,'A']
이것의 output 다음과 같습니다-
a 0.391548
b -0.070649
c -0.317212
d -2.162406
e 2.202797
f 0.613709
g 1.050559
h 1.122680
Name: A, dtype: float64
예 2
# import the pandas library and aliasing as pd
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(8, 4),
index = ['a','b','c','d','e','f','g','h'], columns = ['A', 'B', 'C', 'D'])
# Select all rows for multiple columns, say list[]
print df.loc[:,['A','C']]
이것의 output 다음과 같습니다-
A C
a 0.391548 0.745623
b -0.070649 1.620406
c -0.317212 1.448365
d -2.162406 -0.873557
e 2.202797 0.528067
f 0.613709 0.286414
g 1.050559 0.216526
h 1.122680 -1.621420
예제 3
# import the pandas library and aliasing as pd
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(8, 4),
index = ['a','b','c','d','e','f','g','h'], columns = ['A', 'B', 'C', 'D'])
# Select few rows for multiple columns, say list[]
print df.loc[['a','b','f','h'],['A','C']]
이것의 output 다음과 같습니다-
A C
a 0.391548 0.745623
b -0.070649 1.620406
f 0.613709 0.286414
h 1.122680 -1.621420
예 4
# import the pandas library and aliasing as pd
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(8, 4),
index = ['a','b','c','d','e','f','g','h'], columns = ['A', 'B', 'C', 'D'])
# Select range of rows for all columns
print df.loc['a':'h']
이것의 output 다음과 같습니다-
A B C D
a 0.391548 -0.224297 0.745623 0.054301
b -0.070649 -0.880130 1.620406 1.419743
c -0.317212 -1.929698 1.448365 0.616899
d -2.162406 0.614256 -0.873557 1.093958
e 2.202797 -2.315915 0.528067 0.612482
f 0.613709 -0.157674 0.286414 -0.500517
g 1.050559 -2.272099 0.216526 0.928449
h 1.122680 0.324368 -1.621420 -0.741470
예 5
# import the pandas library and aliasing as pd
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(8, 4),
index = ['a','b','c','d','e','f','g','h'], columns = ['A', 'B', 'C', 'D'])
# for getting values with a boolean array
print df.loc['a']>0
이것의 output 다음과 같습니다-
A False
B True
C False
D False
Name: a, dtype: bool
.iloc ()
Pandas는 순수하게 정수 기반 인덱싱을 얻기 위해 다양한 방법을 제공합니다. 파이썬과 numpy처럼 이것들은0-based 인덱싱.
다양한 접근 방법은 다음과 같습니다.
- 정수
- 정수 목록
- 값의 범위
예 1
# import the pandas library and aliasing as pd
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])
# select all rows for a specific column
print df.iloc[:4]
이것의 output 다음과 같습니다-
A B C D
0 0.699435 0.256239 -1.270702 -0.645195
1 -0.685354 0.890791 -0.813012 0.631615
2 -0.783192 -0.531378 0.025070 0.230806
3 0.539042 -1.284314 0.826977 -0.026251
예 2
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])
# Integer slicing
print df.iloc[:4]
print df.iloc[1:5, 2:4]
이것의 output 다음과 같습니다-
A B C D
0 0.699435 0.256239 -1.270702 -0.645195
1 -0.685354 0.890791 -0.813012 0.631615
2 -0.783192 -0.531378 0.025070 0.230806
3 0.539042 -1.284314 0.826977 -0.026251
C D
1 -0.813012 0.631615
2 0.025070 0.230806
3 0.826977 -0.026251
4 1.423332 1.130568
예제 3
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])
# Slicing through list of values
print df.iloc[[1, 3, 5], [1, 3]]
print df.iloc[1:3, :]
print df.iloc[:,1:3]
이것의 output 다음과 같습니다-
B D
1 0.890791 0.631615
3 -1.284314 -0.026251
5 -0.512888 -0.518930
A B C D
1 -0.685354 0.890791 -0.813012 0.631615
2 -0.783192 -0.531378 0.025070 0.230806
B C
0 0.256239 -1.270702
1 0.890791 -0.813012
2 -0.531378 0.025070
3 -1.284314 0.826977
4 -0.460729 1.423332
5 -0.512888 0.581409
6 -1.204853 0.098060
7 -0.947857 0.641358
.ix ()
순수한 레이블 기반 및 정수 기반 외에도 Pandas는 .ix () 연산자를 사용하여 객체를 선택하고 부분 집합 화하는 하이브리드 방법을 제공합니다.
예 1
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])
# Integer slicing
print df.ix[:4]
이것의 output 다음과 같습니다-
A B C D
0 0.699435 0.256239 -1.270702 -0.645195
1 -0.685354 0.890791 -0.813012 0.631615
2 -0.783192 -0.531378 0.025070 0.230806
3 0.539042 -1.284314 0.826977 -0.026251
예 2
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])
# Index slicing
print df.ix[:,'A']
이것의 output 다음과 같습니다-
0 0.699435
1 -0.685354
2 -0.783192
3 0.539042
4 -1.044209
5 -1.415411
6 1.062095
7 0.994204
Name: A, dtype: float64
표기법 사용
다축 인덱싱으로 Pandas 객체에서 값을 가져 오는 것은 다음 표기법을 사용합니다.
목적 | 인덱서 | 반환 유형 |
---|---|---|
시리즈 | s.loc [인덱서] | 스칼라 값 |
DataFrame | df.loc [row_index, col_index] | 시리즈 객체 |
패널 | p.loc [항목 _ 색인, 주 _ 색인, 부 _ 색인] | p.loc [항목 _ 색인, 주 _ 색인, 부 _ 색인] |
Note − .iloc() & .ix() 동일한 인덱싱 옵션과 반환 값을 적용합니다.
이제 DataFrame 개체에서 각 작업을 수행하는 방법을 살펴 보겠습니다. 기본 인덱싱 연산자 '[]'를 사용합니다.
예 1
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])
print df['A']
이것의 output 다음과 같습니다-
0 -0.478893
1 0.391931
2 0.336825
3 -1.055102
4 -0.165218
5 -0.328641
6 0.567721
7 -0.759399
Name: A, dtype: float64
Note − 값 목록을 []에 전달하여 해당 열을 선택할 수 있습니다.
예 2
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])
print df[['A','B']]
이것의 output 다음과 같습니다-
A B
0 -0.478893 -0.606311
1 0.391931 -0.949025
2 0.336825 0.093717
3 -1.055102 -0.012944
4 -0.165218 1.550310
5 -0.328641 -0.226363
6 0.567721 -0.312585
7 -0.759399 -0.372696
예제 3
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])
print df[2:2]
이것의 output 다음과 같습니다-
Columns: [A, B, C, D]
Index: []
속성 액세스
속성 연산자 '.'를 사용하여 열을 선택할 수 있습니다.
예
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(8, 4), columns = ['A', 'B', 'C', 'D'])
print df.A
이것의 output 다음과 같습니다-
0 -0.478893
1 0.391931
2 0.336825
3 -1.055102
4 -0.165218
5 -0.328641
6 0.567721
7 -0.759399
Name: A, dtype: float64