English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Pandas 인덱스와 데이터 쿼리의 작업 예제
이 장에서는 날짜를 슬라이싱하고 쪼개고 Pandas 객체의 부분 집합을 얻는 방법에 대해 논의할 것입니다.
Python과 NumPy 인덱스 연산자 "[]"와 속성 연산자 ".". Pandas 데이터 구조에 빠르게 쉽게 접근할 수 있습니다. 그러나 접근할 데이터 유형을 미리 알 수 없기 때문에 표준 연산자를 직접 사용하는 것은 일부 최적화 제한이 있습니다. 생산 코드에서는 이 장에서 소개된 최적화된 Pandas 데이터 접근 방법을 사용하는 것이 좋습니다.
Pandas는 다중 축 인덱스의 세 가지 유형을 지원합니다. 아래 표에서 세 가지 유형이 언급되었습니다.-
인덱스 | 설명 |
.loc() | 라벨 기반 |
.iloc() | 정수 기반 |
.ix() | 라벨과 정수 기반 |
Pandas는 라벨 기반으로 pure index를 가지는 여러 가지 방법을 제공합니다. 슬라이싱 시에는 시작 경계도 포함됩니다. 정수는 표시자가 아니라 위치를 참조합니다.
.loc() 다양한 접근 방법을 가지고 있습니다. 예를 들어:
단일 태그 태그 목록 스ライ스 객체 부울 배열
loc 두 개의 단일/리스트/쉼표로 구분된 범위 연산자. 첫 번째는 행을, 두 번째는 열을 지시합니다.
# pandas 라이브러리 가져오기 및 별명 지정 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']) # 특정 열의 모든 행 선택 print(df.loc[:,'A'])
실행 결과:
a 0.391548 b -0.070649 c -0.317212 d -2.162406 e 2.202797 f 0.613709 g 1.050559 h 1.122680 이름: A, 데이터 타입: float64
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']) # 여러 열의 모든 행 선택, 예를 들어 list[] print(df.loc[:,['A','C']])
실행 결과:
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
# pandas 라이브러리 가져오기 및 별명 지정 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']) # 여러 열의 몇 행 선택, 예를 들어 list[] print(df.loc[['a','b','f','h'],['A','C']])
실행 결과:
A C a 0.391548 0.745623 b -0.070649 1.620406 f 0.613709 0.286414 h 1.122680 -1.621420
# pandas 라이브러리 가져오기 및 별명 지정 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']) # 모든 열의 행 범위 선택 print(df.loc['a':'h'])
실행 결과:
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
# pandas 라이브러리 가져오기 및 별명 지정 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']) # 부울 배열을 사용하여 값을 가져오기 위해 print(df.loc['a']>0)
실행 결과:
A False B True C False D False Name: a, dtype: bool
Pandas는纯粹한 정수 인덱스를 얻기 위해 여러 가지 방법을 제공합니다. Python과 NumPy와 마찬가지로, 모두 0을 기반으로 합니다.
다양한 접근 방법은 다음과 같습니다:
정수 정수 목록 값 범위
# pandas 라이브러리 가져오기 및 별명 지정 pd import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(8, 4), 컬럼 = ['A', 'B', 'C', 'D']) # 특정 열의 모든 행 선택 print(df.iloc[:4)
실행 결과:
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
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(8, 4), 컬럼 = ['A', 'B', 'C', 'D']) # 정수 슬라이싱 print(df.iloc[:4] print(df.iloc[1:5, 2:4)
실행 결과:
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
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(8, 4), 컬럼 = ['A', 'B', 'C', 'D']) # 값 목록 슬라이싱 print(df.iloc[[1, 3, 5], [1, 3] print(df.iloc[1:3, :]) print(df.iloc[:1:3)
실행 결과:
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
Pure label과 integer 기반 방법 외에도, Pandas는 .ix() 연산자를 사용하여 선택하고 서브셋 객체를 선택하는 데 사용할 수 있는 복합 방법을 제공합니다.
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(8, 4), 컬럼 = ['A', 'B', 'C', 'D']) # 정수 슬라이싱 print(df.ix[:4)
실행 결과:
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
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(8, 4), 컬럼 = ['A', 'B', 'C', 'D']) # 인덱스 슬라이싱 print(df.ix[:,'A'])
실행 결과:
0 0.699435 1 -0.685354 2 -0.783192 3 0.539042 4 -1.044209 5 -1.415411 6 1.062095 7 0.994204 이름: A, 데이터 타입: float64
Pandas 객체에서 값을 다轴 인덱스를 사용하여 가져오는 것은 다음 기호를 사용합니다:
객체 | 인덱서 | 반환 타입 |
Series | s.loc[indexer] | 스칼라 값 |
DataFrame | df.loc[row_index,col_index] | Series 객체 |
Panel | p.loc[item_index,major_index, minor_index] | p.loc[item_index,major_index, minor_index] |
.iloc()와 .ix()는 동일한 인덱스 옵션과 반환 값을 사용합니다.
우리는 DataFrame 객체에 대해 어떻게 각 작업을 수행하는지 살펴보겠습니다. 기본 인덱스 연산자 '[]'를 사용하겠습니다.-
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(8, 4), 컬럼 = ['A', 'B', 'C', 'D']) print(df['A'])
실행 결과:
0 -0.478893 1 0.391931 2 0.336825 3 -1.055102 4 -0.165218 5 -0.328641 6 0.567721 7 -0.759399 이름: A, 데이터 타입: float64
값 목록을 []에 전달하여 해당 열을 선택할 수 있습니다.
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(8, 4), 컬럼 = ['A', 'B', 'C', 'D']) print(df[['A','B']])
실행 결과:
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
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(8, 4), 컬럼 = ['A', 'B', 'C', 'D']) print(df[2:2)
실행 결과:
컬럼: [A, B, 'C', 'D] 인덱스: []
속성 연산자 "."를 사용하여 열을 선택할 수 있습니다.
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(8, 4), 컬럼 = ['A', 'B', 'C', 'D']) print(df.A)
실행 결과:
0 -0.478893 1 0.391931 2 0.336825 3 -1.055102 4 -0.165218 5 -0.328641 6 0.567721 7 -0.759399 이름: A, 데이터 타입: float64