iloc과 loc의 차이점은 무엇입니까?
누가 이 두 슬라이스 방법이 어떻게 다른지 설명해 줄 수 있나요?
의사들도 봤고, 이런 답변들도 봤지만, 이 세 가지가 어떻게 다른지 아직도 이해할 수 없어요.슬라이싱의 하위 단계이기 때문에 대체적으로 교환이 가능한 것 같습니다.
를 들어, 「 」, 「 」의 첫 번째 5 을 취득한다고 .DataFrame
이은은 떻떻? ???? ???
df.loc[:5]
df.iloc[:5]
용도의 구분이 더 명확한 세 가지 사례를 제시할 수 있습니까?
이 두 이 어떻게 요.df.ix[:5]
ix
팬더 1.0에서 제거됐기 때문에 더 이상 신경 쓰지 않아요.
라벨과위치
두 방법의 주요 차이점은 다음과 같습니다.
loc
특정 레이블이 있는 행(및/또는 열)을 가져옵니다.iloc
정수 위치에 행(및/또는 열)을 가져옵니다.
나타내려면 , 의 「」를 .s
비음성 정수 인덱스를 가진 문자:
>>> s = pd.Series(list("abcdef"), index=[49, 48, 47, 0, 1, 2])
49 a
48 b
47 c
0 d
1 e
2 f
>>> s.loc[0] # value at index label 0
'd'
>>> s.iloc[0] # value at index location 0
'a'
>>> s.loc[0:1] # rows at index labels between 0 and 1 (inclusive)
0 d
1 e
>>> s.iloc[0:1] # rows at index location between 0 and 1 (exclusive)
49 a
여기에서는, 다음의 몇개의 차이점/유사점을 나타냅니다.s.loc
★★★★★★★★★★★★★★★★★」s.iloc
다음과 같이 합니다.
<개체> | 묘사 | s.loc[<object>] |
s.iloc[<object>] |
---|---|---|---|
0 |
단품목 | 인덱스 레이블의 값 0 (문자열))'d' ) |
인덱스 위치 0의 값(문자열)'a' ) |
0:1 |
조각을 내라 | 두 줄(라벨)0 ★★★★★★★★★★★★★★★★★」1 ) |
1행(위치 0의 첫 번째 행) |
1:47 |
끝이 어긋난 슬라이스 | 0 행(빈 시리즈) | 5행(위치 1 이후) |
1:47:-1 |
마이너스 스텝으로 슬라이스하다 | 3열(표준)1 으로 47 ) |
0 행(빈 시리즈) |
[2, 0] |
정수 리스트 | 지정된 레이블이 있는 두 행 | 지정된 위치를 가진 두 줄 |
s > 'e' |
Bool 계열(특성이 있는 값을 나타냄) | 1행(포함)'f' ) |
NotImplementedError |
(s>'e').values |
불 배열 | 1행(포함)'f' ) |
와다같 same loc |
999 |
int 개체가 인덱스에 없습니다. | KeyError |
IndexError 를 벗어남) (범위를 벗어남) |
-1 |
int 개체가 인덱스에 없습니다. | KeyError |
한다.s |
lambda x: x.index[3] |
시리즈에 적용되는 호출 가능(여기서 인덱스로 3개 항목을 반환함rd) | s.loc[s.index[3]] |
s.iloc[s.index[3]] |
loc
님의 라벨 쿼리 기능은 잘 정리된 정수 인덱스를 확장하므로 몇 가지 추가 예를 강조할 필요가 있습니다.
인덱스에 문자열 개체가 포함된 시리즈가 있습니다.
>>> s2 = pd.Series(s.index, index=s.values)
>>> s2
a 49
b 48
c 47
d 0
e 1
f 2
★★loc
의 값을 할 수 .이 은, 「」, 「」를 사용합니다.s2.loc['a']
. 의 오브젝트로 도 있습니다 정수 이외의 오브젝트로 슬라이스할 수도 있습니다.
>>> s2.loc['c':'e'] # all rows lying between 'c' and 'e' (inclusive)
c 47
d 0
e 1
Date Time 인덱스의 경우 레이블별로 가져오기 위해 정확한 날짜/시간을 전달할 필요가 없습니다.예를 들어 다음과 같습니다.
>>> s3 = pd.Series(list('abcde'), pd.date_range('now', periods=5, freq='M'))
>>> s3
2021-01-31 16:41:31.879768 a
2021-02-28 16:41:31.879768 b
2021-03-31 16:41:31.879768 c
2021-04-30 16:41:31.879768 d
2021-05-31 16:41:31.879768 e
2021년 3월/4월 행을 가져오려면 다음 항목만 있으면 됩니다.
>>> s3.loc['2021-03':'2021-04']
2021-03-31 17:04:30.742316 c
2021-04-30 17:04:30.742316 d
행과 열
loc
★★★★★★★★★★★★★★★★★」iloc
데이터 프레임 시리즈두 가지 방법 모두 열과 행을 함께 지정할 수 있습니다.
태플이 지정되면 첫 번째 요소는 행을 인덱싱하는 데 사용되며, 두 번째 요소는 열을 인덱싱하는 데 사용됩니다.
다음에 정의되어 있는 Data Frame에 대해 생각해 보겠습니다.
>>> import numpy as np
>>> df = pd.DataFrame(np.arange(25).reshape(5, 5),
index=list('abcde'),
columns=['x','y','z', 8, 9])
>>> df
x y z 8 9
a 0 1 2 3 4
b 5 6 7 8 9
c 10 11 12 13 14
d 15 16 17 18 19
e 20 21 22 23 24
예를 들어 다음과 같습니다.
>>> df.loc['c': , :'z'] # rows 'c' and onwards AND columns up to 'z'
x y z
c 10 11 12
d 15 16 17
e 20 21 22
>>> df.iloc[:, 3] # all rows, but only the column at index location 3
a 3
b 8
c 13
d 18
e 23
수 .loc
★★★★★★★★★★★★★★★★★」iloc
.
예를 들어 다음 Data Frame을 생각해 보겠습니다.행을 'c'까지 잘라 처음 4개의 열을 얻는 가장 좋은 방법은 무엇입니까?
>>> import numpy as np
>>> df = pd.DataFrame(np.arange(25).reshape(5, 5),
index=list('abcde'),
columns=['x','y','z', 8, 9])
>>> df
x y z 8 9
a 0 1 2 3 4
b 5 6 7 8 9
c 10 11 12 13 14
d 15 16 17 18 19
e 20 21 22 23 24
를 얻을 수 .iloc
또 방법의 을 받을 수 있습니다.
>>> df.iloc[:df.index.get_loc('c') + 1, :4]
x y z 8
a 0 1 2 3
b 5 6 7 8
c 10 11 12 13
get_loc()
는 "이 인덱스에서 라벨의 위치를 가져옵니다"를 의미하는 인덱스 메서드입니다.슬라이스 할 때 부터iloc
는 엔드 포인트에서 제외됩니다.행 'c'도 필요한 경우 이 값에 1을 추가해야 합니다.
iloc
정수 위치에 따라 동작합니다. 행 이 어떤행 라벨이 항상 첫 번째 수 .
df.iloc[0]
또는 마지막 5행은 다음과 같습니다.
df.iloc[-5:]
열에서도 사용할 수 있습니다.그러면 세 번째 열이 검색됩니다.
df.iloc[:, 2] # the : in the first position indicates all rows
행과 열의 교차점을 얻기 위해 이들을 조합할 수 있습니다.
df.iloc[:3, :3] # The upper-left 3 X 3 entries (assuming df has 3+ rows and columns)
반,는.loc
이치노문자열이 행 및 열 레이블인 데이터 프레임을 설정합니다.
df = pd.DataFrame(index=['a', 'b', 'c'], columns=['time', 'date', 'name'])
그러면 첫 번째 줄에 다음 줄에
df.loc['a'] # equivalent to df.iloc[0]
두 두의 "" " " " "'date'
df.loc['b':, 'date'] # equivalent to df.iloc[1:, 1]
기타 등등.이제 기본 행 및 열 인덱스는 다음과 같습니다.DataFrame
부터의 정수입니다.이 경우 0은 0의 입니다.이 경우iloc
★★★★★★★★★★★★★★★★★」loc
같은 방식으로 작동한다는 거죠이것이 당신의 세 가지 예가 동일한 이유입니다.문자열이나 날짜 시간 등 숫자가 아닌 인덱스가 있는 경우 df.loc[:5]
에러가 발생합니다.
의 「열 검색」을 만으로 열 을 할 수 .__getitem__
:
df['time'] # equivalent to df.loc[:, 'time']
이제 위치 및 명명된 인덱스를 혼합한다고 가정합니다. 즉, 행 인덱스에 문자열이 있고 열 인덱스에 정수가 있는 데이터 프레임을 만드는 대신 행에 있는 이름과 열에 있는 위치를 사용하여 인덱스를 작성한다고 가정합니다.여기가 바로 그 장소입니다.ix
★★★★★★★★★★★★★★★★★★:
df.ix[:2, 'time'] # the first two rows of the 'time' column
는 부울 벡터를 '부울 벡터'로 수 가 있다고 합니다.loc
메서드도 있습니다.예를 들어 다음과 같습니다.
b = [True, False, True]
df.loc[b]
행과 세 됩니다.df
이은 '먹다'에 합니다.df[b]
수벡터에 의한 에도 사용할 수 .
df.loc[b, 'name'] = 'Mary', 'John'
데이터 프레임에 결측값만 있기 때문에, 제 생각에, 받아들여진 답변은 혼란스럽습니다.또한 포지션 베이스라는 용어는 마음에 들지 않습니다..iloc
그 대신 정수 위치를 선호합니다. 훨씬 더 설명적이고 정확히 무엇이.iloc
의 약자입니다.INTEGER - INGERE이다..iloc
을 사용하다
서브셋 선택에 대한 자세한 내용은 블로그 시리즈를 참조하십시오.
.ix는 권장되지 않으며 모호하므로 절대 사용하지 마십시오.
★★★★★★★★★★★★★★★★★★.ix
되지 않는 내용입니다.하겠습니다.우리는 단지 그 사이의 차이점에만 초점을 맞출 것입니다..loc
★★★★★★★★★★★★★★★★★」.iloc
.
차이에 대해 설명하기 전에 데이터 프레임에 각 열과 인덱스를 식별하는 데 도움이 되는 레이블이 있다는 점을 이해하는 것이 중요합니다.데이터 프레임의 예를 보겠습니다.
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
인덱스 또는 열 레이블로만 데이터를 선택하는 인덱서입니다.샘플 Data Frame에서는 인덱스 값으로 의미 있는 이름을 제공했습니다.많은 데이터 프레임에는 의미 있는 이름이 없으며 대신 기본적으로 0 ~n-1의 정수만 지정됩니다. 여기서 n은 데이터 프레임의 길이입니다.
세 요..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를 사용하여 여러 행 선택
슬라이스 표기법은 시작, 중지 및 단계 값으로 정의됩니다.라벨로 슬라이스할 때 판다는 반환에 정지 값을 포함합니다.아론에서 딘까지 이어지는 슬라이스입니다.스텝 사이즈는 명시적으로 정의되어 있지 않지만 기본값은 1 입니다.
df.loc['Aaron':'Dean']
복잡한 슬라이스는 Python 목록과 같은 방법으로 가져올 수 있습니다.
.iloc는 정수 위치만 사용하여 데이터를 선택합니다.
이번에는 ,, 그로 볼까요?.iloc
. DataFrame 내의 모든 데이터 행과 열에는 데이터 프레임을 정의하는 정수 위치가 있습니다.출력에 시각적으로 표시되는 라벨에 추가됩니다.정수 위치는 0부터 시작하는 맨 위/왼쪽 행/열의 개수입니다.
세 요..iloc
- 정수
- 정수 목록
- 정수를 시작 및 중지 값으로 사용하는 슬라이스 표기법
.iloc에서 정수를 사용하여 단일 행 선택
df.iloc[4]
그러면 5번째 행(정수 위치 4)이 시리즈로 반환됩니다.
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
4열과 2열 4열 4열도 사용할 수 ..loc
수음음 음 음 음 、 음 음 음 、 음 음 다 、
col_names = df.columns[[2, 4]]
df.loc[['Nick', 'Cornelia'], col_names]
을 "인덱스 라벨"을 "인덱스 라벨"로합니다.get_loc
인덱스 방식
labels = ['Nick', 'Cornelia']
index_ints = [df.index.get_loc(label) for label in labels]
df.iloc[index_ints, [2, 4]]
부울 선택
할 수 .loc ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★」를 들어 30세 이상의 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'
.loc
★★★★★★★★★★★★★★★★★」.iloc
인덱스에 사용됩니다. 즉, 데이터의 일부를 꺼내는 데 사용됩니다.다른 점은 질질,, in점 in in 이다..loc
는 라벨 인덱싱을 가능하게 만, 「」는 「」입니다..iloc
위치 기반 인덱싱을 사용할 수 있습니다.
.loc
★★★★★★★★★★★★★★★★★」.iloc
해 주세요..iloc
는 인덱스(i부터 시작) 위치를 기반으로 합니다..loc
는 라벨(l부터 시작)에 근거하고 있습니다.
.loc
.loc
파이썬그러나 부울 배열, 슬라이스 및 레이블 목록(Python 사전에서 작동하지 않음)을 사용할 수 있습니다.
iloc
.iloc
위치 '인덱스 위치')를 합니다.pandas
Python ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★」 pandas
을 벌다IndexError
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
예
다음 예시는 다음 두 가지 차이점을 설명하기 위해서.iloc
★★★★★★★★★★★★★★★★★」.loc
하다
>>> s = pd.Series([11, 9], index=["1990", "1993"], name="Magic Numbers")
>>> s
1990 11
1993 9
Name: Magic Numbers , dtype: int64
.iloc
»
>>> s.iloc[0]
11
>>> s.iloc[-1]
9
>>> s.iloc[4]
Traceback (most recent call last):
...
IndexError: single positional indexer is out-of-bounds
>>> s.iloc[0:3] # slice
1990 11
1993 9
Name: Magic Numbers , dtype: int64
>>> s.iloc[[0,1]] # list
1990 11
1993 9
Name: Magic Numbers , dtype: int64
.loc
»
>>> s.loc['1990']
11
>>> s.loc['1970']
Traceback (most recent call last):
...
KeyError: ’the label [1970] is not in the [index]’
>>> mask = s > 9
>>> s.loc[mask]
1990 11
Name: Magic Numbers , dtype: int64
>>> s.loc['1990':] # slice
1990 11
1993 9
Name: Magic Numbers, dtype: int64
★★★★★★★★★★★★★★★★★★s
인덱스 값, 즉 '인덱스 값'이 ..loc
하다
>>> s.loc[0]
Traceback (most recent call last):
...
KeyError: 0
DataFrame.loc()
: 값으로DataFrame.iloc()
: 행 행 " " " "
예:
, 5행, 5행, 선택합니다.df1
입니다.
df1.iloc[:5]
첫 , , A행, B행, 을 선택합니다.df1
입니다.
df1.loc['A','B']
다음 예에서는 그 차이를 보여 줍니다.
df = pd.DataFrame({'col1': [1,2,3,4,5], 'col2': ["foo", "bar", "baz", "foobar", "foobaz"]})
col1 col2
0 1 foo
1 2 bar
2 3 baz
3 4 foobar
4 5 foobaz
df = df.sort_values('col1', ascending = False)
col1 col2
4 5 foobaz
3 4 foobar
2 3 baz
1 2 bar
0 1 foo
인덱스 기반 액세스:
df.iloc[0, 0:2]
col1 5
col2 foobaz
Name: 4, dtype: object
정렬된 데이터 프레임의 첫 번째 행이 표시됩니다.(인덱스 0 행이 아니라 인덱스 4 행입니다).
위치 기반 액세스:
df.loc[0, 'col1':'col2']
col1 1
col2 foo
Name: 0, dtype: object
df가 정렬되어 있어도 인덱스0 의 행을 얻을 수 있습니다.
언급URL : https://stackoverflow.com/questions/31593201/how-are-iloc-and-loc-different
'itsource' 카테고리의 다른 글
이진 로깅 옵션이 켜져 있을 때 SUPER 권한이 해제되는 이유는 무엇입니까? (0) | 2022.09.27 |
---|---|
이클립스 프로젝트에서 javascript 검증을 제거하려면 어떻게 해야 합니까? (0) | 2022.09.27 |
이 C 프로그램은 두 가지 주요 기능으로 어떻게 컴파일 및 실행됩니까? (0) | 2022.09.27 |
xdebug가 작동하는지 확인합니다. (0) | 2022.09.27 |
Vue 바인딩 상위 및 하위 구성 요소 (0) | 2022.09.26 |