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