내 의견으로는, 누락 된 값 만있는 DataFrame을 사용하기 때문에 허용되는 대답이 혼란 스럽습니다. 나는 또한 용어처럼하지 않는 위치에 기반 을 위해 .iloc대신, 선호하는 위치의 정수 훨씬 더 자세한 설명과 정확히 같은 .iloc의미합니다. 핵심 단어는 정수입니다- .iloc정수가 필요합니다.
자세한 내용 은 서브셋 선택에 대한 매우 자세한 블로그 시리즈 를 참조하십시오.
.ix는 더 이상 사용되지 않으며 모호하므로 절대 사용해서는 안됩니다.
때문에 .ixIS가되지 않는 우리는 차이점에 초점을 맞출 것이다 .loc및 .iloc.
차이점에 대해 이야기하기 전에 DataFrame에 각 열과 각 인덱스를 식별하는 데 도움이되는 레이블이 있다는 것을 이해해야합니다. 샘플 DataFrame을 살펴 보겠습니다.
df = pd.DataFrame({'age':[30, 2, 12, 4, 32, 33, 69],
'color':['blue', 'green', 'red', 'white', 'gray', 'black', 'red'],
'food':['Steak', 'Lamb', 'Mango', 'Apple', 'Cheese', 'Melon', 'Beans'],
'height':[165, 70, 120, 80, 180, 172, 150],
'score':[4.6, 8.3, 9.0, 3.3, 1.8, 9.5, 2.2],
'state':['NY', 'TX', 'FL', 'AL', 'AK', 'TX', 'TX']
},
index=['Jane', 'Nick', 'Aaron', 'Penelope', 'Dean', 'Christina', 'Cornelia'])

굵게 표시된 모든 단어 는 레이블입니다. 라벨은, age, color, food, height, score및 state에 사용되는 열 . 다른 레이블, Jane, Nick, Aaron, Penelope, Dean, Christina, Cornelia에 사용되는 인덱스 .
DataFrame에서 특정 행을 선택하는 기본 방법은 .loc및 .iloc인덱서를 사용하는 것입니다. 이 인덱서는 각각 동시에 열을 선택하는 데 사용할 수 있지만 지금은 행에 집중하는 것이 더 쉽습니다. 또한 각 인덱서는 이름 바로 다음에 오는 일련의 대괄호를 사용하여 선택합니다.
.loc은 레이블로만 데이터를 선택합니다.
먼저 .loc인덱스 또는 열 레이블로 데이터를 선택 하는 인덱서 에 대해 이야기하겠습니다 . 샘플 DataFrame에서 인덱스의 값으로 의미있는 이름을 제공했습니다. 많은 DataFrame에는 의미있는 이름이 없으며 대신 0에서 n-1 사이의 정수로 기본 설정됩니다. 여기서 n은 DataFrame의 길이입니다.
사용할 수있는 세 가지 입력이 있습니다 .loc
- 끈
- 문자열 목록
- 문자열을 시작 및 중지 값으로 사용하는 슬라이스 표기법
문자열이있는 .loc을 사용하여 단일 행 선택
단일 데이터 행을 선택하려면 다음에 괄호 안에 색인 레이블을 배치하십시오 .loc.
df.loc['Penelope']
이것은 데이터 행을 시리즈로 리턴합니다.
age 4
color white
food Apple
height 80
score 3.3
state AL
Name: Penelope, dtype: object
문자열 목록이있는 .loc을 사용하여 여러 행 선택
df.loc[['Cornelia', 'Jane', 'Dean']]
목록에 지정된 순서대로 행이있는 DataFrame을 반환합니다.

슬라이스 표기법이있는 .loc를 사용하여 여러 행 선택
슬라이스 표기법은 시작, 중지 및 단계 값으로 정의됩니다. 레이블로 슬라이스 할 때 팬더는 리턴 값에 중지 값을 포함합니다. Aaron에서 Dean까지 다음 조각이 포함됩니다. 단계 크기는 명시 적으로 정의되어 있지 않지만 기본값은 1입니다.
df.loc['Aaron':'Dean']

복잡한 슬라이스는 Python 목록과 같은 방식으로 가져올 수 있습니다.
.iloc은 정수 위치로만 데이터를 선택합니다
이제로 넘어 갑시다 .iloc. DataFrame의 모든 데이터 행과 열에는이를 정의하는 정수 위치가 있습니다. 이것은 출력에 시각적으로 표시되는 레이블에 추가됩니다 . 정수 위치는 단순히 0에서 시작하는 상단 / 왼쪽의 행 / 열 수입니다.
사용할 수있는 세 가지 입력이 있습니다 .iloc
- 정수
- 정수 목록
- 시작 및 중지 값으로 정수를 사용하는 슬라이스 표기법
정수가있는 .iloc을 사용하여 단일 행 선택
df.iloc[4]
5 번째 행 (정수 위치 4)을 Series로 반환합니다.
age 32
color gray
food Cheese
height 180
score 1.8
state AK
Name: Dean, dtype: object
정수 목록이있는 .iloc을 사용하여 여러 행 선택
df.iloc[[2, -2]]
세 번째와 두 번째 행부터 마지막 행까지의 DataFrame을 반환합니다.

슬라이스 표기법이있는 .iloc을 사용하여 여러 행 선택
df.iloc[:5:3]

.loc 및 .iloc을 사용하여 행과 열을 동시에 선택
두 가지의 뛰어난 기능 중 하나 .loc/.iloc는 행과 열을 동시에 선택할 수 있다는 것입니다. 위의 예에서 모든 열은 각 선택 항목에서 반환되었습니다. 행과 동일한 입력 유형을 가진 열을 선택할 수 있습니다. 행과 열 선택을 쉼표로 구분하면 됩니다.
예를 들어 다음과 같이 열 높이, 점수 및 상태만으로 Jane과 Dean 열을 선택할 수 있습니다.
df.loc[['Jane', 'Dean'], 'height':]

행의 레이블 목록과 열의 슬라이스 표기법을 사용합니다.
.iloc정수만 사용하여 자연스럽게 유사한 작업을 수행 할 수 있습니다 .
df.iloc[[1,4], 2]
Nick Lamb
Dean Cheese
Name: food, dtype: object
라벨과 정수 위치를 통한 동시 선택
.ix유용하지만 때로는 혼란스럽고 모호한 레이블 및 정수 위치와 동시에 선택하는 데 사용되었으며 고맙게도 더 이상 사용되지 않습니다. 레이블과 정수 위치를 혼합하여 선택해야하는 경우 선택 레이블 또는 정수 위치를 모두 선택해야합니다.
우리가 행을 선택하려는 경우 예를 들어, Nick및 Cornelia열 2, 4와 함께를, 우리가 사용할 수있는 .loc다음과 라벨에 정수를 변환 :
col_names = df.columns[[2, 4]]
df.loc[['Nick', 'Cornelia'], col_names]
또는 get_locindex 메소드 를 사용하여 인덱스 레이블을 정수로 변환하십시오 .
labels = ['Nick', 'Cornelia']
index_ints = [df.index.get_loc(label) for label in labels]
df.iloc[index_ints, [2, 4]]
부울 선택
.loc 인덱서는 부울 선택을 수행 할 수도 있습니다. 우리가 모든 행을 찾는 데 관심이 있다면 예를 들어, 연령은 30 위에 반환 단지 wher food과 score열이 우리가 다음을 수행 할 수 있습니다 :
df.loc[df['age'] > 30, ['food', 'score']]
이것을 복제 .iloc할 수 는 있지만 부울 시리즈를 전달할 수는 없습니다. 부울 시리즈를 다음과 같이 numpy 배열로 변환해야합니다.
df.iloc[(df['age'] > 30).values, [2, 4]]
모든 행 선택
.loc/.iloc열 선택에만 사용할 수 있습니다 . 다음과 같이 콜론을 사용하여 모든 행을 선택할 수 있습니다.
df.loc[:, 'color':'score':2]

인덱싱 연산자 인 []은 행과 열을 동시에 선택할 수는 없습니다.
대부분의 사람들은 열을 선택하는 DataFrame 인덱싱 연산자의 기본 목적에 익숙합니다. 문자열은 단일 열을 Series로 선택하고 문자열 목록은 여러 열을 DataFrame으로 선택합니다.
df['food']
Jane Steak
Nick Lamb
Aaron Mango
Penelope Apple
Dean Cheese
Christina Melon
Cornelia Beans
Name: food, dtype: object
목록을 사용하여 여러 열을 선택합니다
df[['food', 'score']]

사람들이 익숙하지 않은 것은 슬라이스 표기법을 사용할 때 행 레이블 또는 정수 위치로 선택이 발생한다는 것입니다. 이것은 매우 혼란스럽고 거의 사용하지 않는 것이지만 작동합니다.
df['Penelope':'Christina'] # slice rows by label

df[2:6:2] # slice rows by integer location

명확성의 .loc/.iloc선택 행에 대해 매우 바람직하다. 인덱싱 연산자만으로는 행과 열을 동시에 선택할 수 없습니다.
df[3:5, 'color']
TypeError: unhashable type: 'slice'