판다의 LOC 대 ILOC: 판다의 LOC와 ILOC의 차이점

게시 됨: 2020-08-01

목차

Pandas의 Loc 및 iloc

새로운 Python 개발자들 사이에서 혼동을 일으키는 일반적인 원인은 loc 대 iloc입니다. 둘 다 매우 유사해 보이며 유사한 작업을 수행합니다. 그래서 이것은 어떤 학생이든 어리둥절할 수 있습니다.

iloc과 loc의 차이점을 알고 싶다면 제대로 찾아오셨습니다. 이 기사에서 이 주제에 대해 자세히 논의할 것이기 때문입니다. 이러한 기능 간의 주요 차이점을 찾은 다음 개념을 더 잘 이해하기 위해 작동하는 모습을 볼 수 있습니다. Pandas에 대해 자세히 알아보려면 데이터 과학 과정을 확인하세요.

시작하자.

loc과 iloc의 차이점

1. 파이썬의 iloc

선택을 위해 Python에서 iloc을 사용할 수 있습니다. 정수 위치 기반이며 위치별로 선택하는 데 도움이 됩니다. 따라서 인덱스가 5인 행을 찾으려면 iloc은 이름이나 레이블에 관계없이 데이터 프레임의 다섯 번째 행을 표시합니다.

다음은 Python의 iloc 예제입니다.

>>> mydict = [{'a': 1, 'b': 2, 'c': 3, 'd': 4},

… {'a': 100, 'b': 200, 'c': 300, 'd': 400},

… {'a': 1000, 'b': 2000, 'c': 3000, 'd': 4000 }]

>>> df = pd.DataFrame(mydict)

>>> df

ABCD

0 1 2 3 4

1 100 200 300 400

2 1000 2000 3000 4000

위의 데이터 프레임에 대해 iloc 함수를 사용하여 정수 스칼라로 행을 인덱싱합니다.

>>> 유형(df.iloc[0])

<클래스 'pandas.core.series.Series'>

>>> df.iloc[0]

1

나 2

c 3

디 4

이름: 0, dtype: int64

2. 판다에서 loc

Pandas에서 loc을 사용하여 레이블을 사용하여 여러 행과 열에 액세스할 수 있습니다. 그러나 부울 배열과 함께 사용할 수도 있습니다.

loc을 사용하여 인덱스가 5인 행을 찾는 경우 다섯 번째 행은 얻지 못합니다. 대신 이름이 '5'인 행만 가져옵니다.

다음은 Pandas의 loc 예제입니다.

>>> df = pd.DataFrame([[1, 2], [4, 5], [7, 8]],

… index=['코브라', '바이퍼', '사이드와인더'],

… 열=['최대 속도', '방패'])

>>> df

max_speed 실드

코브라 1 2

독사 4 5

사이드와인더 7 8

위는 우리가 행을 추출할 테이블입니다:

>>> df.loc['바이퍼']

최대 속도 4

방패 5

이름: 바이퍼, dtype: int64

loc 대 iloc에 대한 자세한 예

선택을 위해 이 두 기능을 모두 사용하지만 차이점을 이해하기 위해 자세한 예를 논의하는 것이 가장 좋습니다.

이 예에서는 kaggle에서 사용할 수 있는 telco 고객 데이터 세트를 사용합니다. 우리는 그것을 데이터 프레임에 추가할 것입니다:

df = pd.read_csv("프로젝트/churn_prediction/Telco-Customer-Churn.csv")

df.head ()

ID 성별 시니어시티즌 파트너 부양가족 보유 핸드폰 여러 줄 인터넷 보안
0 7590-VHVEG 여자 0 아니요 1 아니요 전화 없음 DSL 아니요
1 5575-GNVDE 남성 0 아니요 아니요 34 아니요 DSL
2 3668-QPYBK 남성 0 아니요 아니요 2 아니요 DSL

이 데이터세트에는 21개의 열이 있습니다. 우리는 데모 목적으로 몇 가지만 보여주었습니다. 이미 논의한 바와 같이 loc을 사용하여 레이블로 데이터를 선택합니다. 여기에서 열 이름은 성별, 재임 기간, OnlineSecurity와 같은 열 레이블입니다. 그것들은 모두 열 이름과 레이블입니다.

특정 인덱스를 할당하지 않았기 때문에 pandas는 기본적으로 행에 대한 정수 인덱스를 생성합니다. 행 레이블은 0에서 시작하여 위로 올라가는 정수입니다. 이 예에서 우리는 loc과 iloc이 어떻게 다르게 동작하는지 볼 것입니다.

  • 행 "1" 및 "파트너" 열 선택

df.loc[1, '파트너']

출력: '아니오'

행 '1'의 '파트너' 열에 있는 값을 보여줍니다.

  • 행 레이블 '4' 및 열 'customerID' 및 'gender' 선택

df.loc[:4, ['고객 ID', '성별']]

고객 ID

성별

0

7590-VHVEG

여자

1

5575-GNVDE

남성

2

3668-QPYBK

남성

7795-CFOCW

남성

4

9237-HQITU

여자

  • 행 레이블 "1", "2", "3" 및 "Dependents" 열 선택

df.loc[[1,2,3], '종속']

1 아니요

2 아니요

3 아니요

이름: 종속, dtype: 개체

이번에는 데이터 프레임을 필터링하고 iloc 또는 loc을 적용합니다.

  • 파트너가 있는 고객의 "10" 및 "PhoneService" 및 "InternetService" 열에 대한 행 레이블 선택(파트너는 '예'여야 함)

df [df.Partner == '예'].loc:10, ['전화 서비스', '인터넷 서비스']]

위의 경우 데이터베이스에 필터를 적용했지만 인덱스를 변경하지 않았으므로 필터에 필요한 행의 여러 레이블이 출력에서 ​​생략되었습니다. 따라서 여기에서 loc[:10]을 사용하여 레이블이 최대 "10"인 행을 선택했습니다.

반면에 여기서 iloc을 사용하고 필터를 적용하면 iloc이 레이블에 관계없이 위치별로 선택하므로 10개의 행을 얻습니다. 다음은 iloc[:10]을 적용하면 얻을 수 있는 결과입니다.

df[df.파트너 == '예'].iloc[:10, [6,8]]

전화 서비스 인터넷 서비스
0 아니요 DSL
8 광섬유
10 DSL
12 광섬유
15 광섬유
18 DSL
21 아니요
23 DSL
24 DSL
26 광섬유

열을 선택하는 방법을 변경해야 한다는 사실을 눈치채셨을 것입니다.

읽기: Python Pandas 자습서

  • iloc으로 처음 5개 열과 처음 5개 행 선택

df.iloc[:4, :4]

고객 ID 성별 고령자 파트너
0 7590-VHVEG 여자 0
1 5575-GNVDE 남성 0 아니요
2 3668-QPYBK 남성 0 아니요
7795-CFOCW 남성 0 아니요

iloc을 사용하여 끝에서 위치를 선택할 수 있습니다. 이를 위해 우리는 단순히 음의 정수(-1, -2 등)를 사용하고 시작해야 합니다.

  • 마지막 5개 열과 마지막 5개 행 선택

df.iloc[-5:, -5:]

종이 없는 청구서 결제수단 월별 요금 총 요금 휘젓다
7038 우편 수표 84.80 1990.5 아니요
7039 신용 카드 103.20 7362.9 아니요
7040 전자 수표 29.60 346.45 아니요
7041 우편 수표 74.40 306.6
7042 은행 송금 105.65 6844.5 아니요

iloc과 함께 람다 함수를 사용할 수도 있습니다. (람다 함수는 단일 표현식을 가질 수 있지만 인수의 수에는 제한이 없는 Python의 작은 익명 함수입니다)

  • 15번째 줄까지 세 번째 행마다 선택하고 "인터넷 서비스" 및 "파트너" 열만 표시

df.iloc[ 람다 x: (x.index x 3 == 0) & (x.index <= 150]['파트너', '인터넷 서비스' ]]

파트너 인터넷 서비스
0 DSL
아니요 DSL
6 아니요 광섬유
9 아니요 DSL
12 광섬유
15 광섬유

또한 그 사이에 있는 레이블이나 위치를 선택할 수도 있습니다.

  • 4와 6 사이의 열 위치를 선택하고 20과 25 사이의 행 위치를 선택합니다.

df.iloc[20:25, 4:6]

부양가족 보유
20 아니요 1
21 아니요 12
22 아니요 1
23 아니요 58
24 아니요 49

이제 iloc에 레이블을 전달하려고 하면 Pandas는 다음 오류 메시지를 표시합니다.

ValueError: 위치 기반 인덱싱은 [정수, 정수 슬라이스(START 포인트는 INCLUDED, END 포인트는 EXCLUDED), 리스트와 같은 정수, 부울 배열] 유형만 가질 수 있습니다.

위치를 loc에 전달하면 비슷한 오류가 발생합니다.

읽어보기: 팬더 인터뷰 질문

파이썬에 대해 더 알아보기

학생은 질문을 하고 답을 찾아야 합니다. 이 기사가 Pandas의 loc(또는 Python의 iloc)에 대한 질문에 대한 답변이 되었기를 바랍니다. 작동 방식을 이해하기 위해 다른 데이터 세트에서 이러한 기능을 직접 시도하는 것이 가장 좋습니다.

Python, Pandas 및 관련 주제에 대해 자세히 알아보려면 블로그를 방문해야 합니다. 당사 전문가는 여기에 여러 가지 자세한 리소스를 추가합니다.

데이터 과학에 대해 자세히 알아보려면 작업 전문가를 위해 만들어졌으며 10개 이상의 사례 연구 및 프로젝트, 실용적인 실습 워크숍, 업계 전문가와의 멘토링, 1 - 업계 멘토와 일대일, 400시간 이상의 학습 및 최고의 기업과의 취업 지원.

Pandas DataFrame의 행을 어떻게 추가할 수 있습니까?

DataFrame에 행을 삽입하려면 loc, iloc 및 ix 명령을 사용할 수 있습니다.

1. loc은 주로 인덱스의 레이블에 사용됩니다. 인덱스가 4인 DataFrame 항목을 찾고 있음을 나타내는 loc 4에 삽입할 때와 같이 이해할 수 있습니다.
2. iloc은 주로 인덱스에서 위치를 찾는 데 사용됩니다. 인덱스 4에 있는 DataFrame 항목을 검색하고 있음을 나타내는 iloc 4에 삽입하는 것과 같습니다.
3. 인덱스가 정수 기반이면 ix에 레이블을 전달하기 때문에 ix의 경우는 복잡합니다. ix 4는 인덱스가 4인 값에 대해 DataFrame을 검색하고 있음을 나타냅니다.

Python의 Pandas 컨텍스트에서 재인덱싱이란 무엇입니까?

DataFrame의 행 및 열 레이블은 다시 인덱싱할 때 변경됩니다. '재색인'이라는 용어는 단일 축을 따라 특정 레이블 집합에 데이터를 정렬하는 프로세스를 나타냅니다. Pandas에서 재인덱싱을 사용하여 DataFrame의 행 및 열 인덱스를 변경할 수 있습니다. 많은 pandas 시리즈 또는 pandas DataFrame과 연결된 많은 인덱스 데이터 구조는 인덱스와 함께 활용할 수 있습니다.

Pandas의 데이터 작업에는 어떤 것이 있습니까?

Pandas의 DataFrame에는 다음과 같은 몇 가지 중요한 데이터 작업이 있습니다.

1. 행과 열의 선택 - 행과 열의 이름을 전달함으로써 DataFrame의 모든 행과 열을 선택할 수 있습니다. 1차원이 되어 DataFrame에서 선택하면 시리즈로 간주됩니다.
2. 데이터 필터링 - DataFrame의 일부 부울 표현식을 사용하여 데이터를 필터링할 수 있습니다.
3. Null 값 - 항목에 데이터가 제공되지 않으면 Null 값을 받습니다. 일반적으로 NaN으로 표시되는 다른 열에는 값이 있을 수 없습니다.