programing

팬더 로크 vs 일록 vs 일트?

randomtip 2022. 9. 6. 22:04
반응형

팬더 로크 vs 일록 vs 일트?

에서 Python으로 했는데, Python의 셀.Pandas매뉴얼은 읽었지만 다양한 현지화/선택 옵션의 실제 의미를 이해하는데 어려움을 겪고 있습니다.

가 꼭 가가왜왜 is is?를 사용해야 하는 요?.loc ★★★★★★★★★★★★★★★★★」.iloc에 걸쳐서at , , , , 입니다.iat아니면 그 반대일까요?어떤 상황에서 어떤 방법을 사용하면 좋을까요?


은 이 v0. 이전에 으로, 팬더 v0.20보다 : 래의0000 v0.20이라는 가 존재했었다는 점에 하십시오. 【v0.20】.ix이은 나중에 두 .loc ★★★★★★★★★★★★★★★★★」iloc 및 인덱스를 위치 기반 인덱스를 구분합니다.ix는 일관성 없는 동작과 굽힘이 어려워 단종되었으며 현재 버전의 판다(>= 1.0)에는 더 이상 존재하지 않습니다.

loc: 인덱스에서만 작업
iloc: 위치 작업
at: 스칼라 값을 가져옵니다.매우 빠른 위치입니다.
iat: 스칼라 값을 가져옵니다.매우 빠른 속도입니다.

또한.

at ★★★★★★★★★★★★★★★★★」iat는, 의 단일 하는 으로 하고 .스칼라, 스칼라, 스칼라, 스칼라, 스칼라, 스칼라, 스칼라, 스칼라, 스칼라, 스칼라, 스칼라, 스칼라, 스칼라, 스칼라, 스칼라, 스칼라, 스칼라, 스칼라, 스칼라, 스칼라.loc ★★★★★★★★★★★★★★★★★」iloc여러 요소에 동시에 액세스하여 잠재적으로 벡터화 연산을 수행할 수 있습니다.

http://pyciencia.blogspot.com/2015/05/obtener-y-filtrar-datos-de-un-dataframe.html

★★★의 pandas 0.20ix을 사용하다은, 「」의 .loc,iloc,at,iat,set_value위치 기반/라벨 기반 인덱싱을 혼합하여 수행하는 방법.


loc - 라벨 베이스
전달할 수 .1-D 배열을 사용할수 .배열은 인덱스 또는 열의 슬라이스(하위 집합)이거나 인덱스 또는 열과 길이가 동일한 부울 배열일 수 있습니다.

특수 참고: 스칼라 인덱서가 통과되면loc는 이전에 존재하지 않았던 새 인덱스 또는 열 값을 할당할 수 있습니다.

# label based, but we can use position values
# to get the labels from the index object
df.loc[df.index[2], 'ColName'] = 3

df.loc[df.index[1:3], 'ColName'] = 3

iloc - 위치 기반
유사하다loc지수 값이 아닌 위치가 있는 경우는 예외입니다.그러나 새 열이나 인덱스를 할당할 수 없습니다.

# position based, but we can get the position
# from the columns object via the `get_loc` method
df.iloc[2, df.columns.get_loc('ColName')] = 3

df.iloc[2, 4] = 3

df.iloc[:3, 2:4] = 3

at - 라벨 베이스
비슷하게 동작합니다.locscalar 인덱서용.배열 인덱서에서 작동할 수 없습니다. 새 인덱스 및 열을 할당할 수 있습니다.

우위점loc게게는는는는는는는는
단점은 인덱서에 어레이를 사용할 수 없다는 것입니다.

# label based, but we can use position values
# to get the labels from the index object
df.at[df.index[2], 'ColName'] = 3

df.at['C', 'ColName'] = 3

iat - 위치 기반
와 동일하게 동작합니다.iloc. 어레이 인덱서에서는 사용할 수 없습니다. 인덱스 및 열을 할당할 수 없습니다.

우위점iloc게게는는는는는는는는
단점은 인덱서에 어레이를 사용할 수 없다는 것입니다.

# position based, but we can get the position
# from the columns object via the `get_loc` method
IBM.iat[2, IBM.columns.get_loc('PNL')] = 3

set_value - 라벨 베이스
비슷하게 동작합니다.locscalar 인덱서용.어레이 인덱서에서 작동할 수 없습니다. 새 인덱스 및 열을 할당할 수 있습니다.

장점 오버헤드가 매우 적기 때문에 매우 빠릅니다!
단점 오버헤드가 매우 적기 때문에pandas안전 점검을 많이 안 하고 있어요본인 부담으로 사용하세요.또한, 이것은 공공용으로 의도된 것이 아닙니다.

# label based, but we can use position values
# to get the labels from the index object
df.set_value(df.index[2], 'ColName', 3)

set_value 위치 기반 포함
와 동일하게 동작합니다.iloc. 어레이 인덱서에서는 사용할 수 없습니다. 인덱스 및 열을 할당할 수 없습니다.

장점 오버헤드가 매우 적기 때문에 매우 빠릅니다!
단점 오버헤드가 매우 적기 때문에pandas안전 점검을 많이 안 하고 있어요본인 부담으로 사용하세요.또한, 이것은 공공용으로 의도된 것이 아닙니다.

# position based, but we can get the position
# from the columns object via the `get_loc` method
df.set_value(2, df.columns.get_loc('ColName'), 3, takable=True)

판다들이 DataFrame에서 선택하는 방법은 크게 두 가지가 있습니다.

  • 라벨별
  • 정수 위치별

이 문서에서는 정수 위치를 나타내는 용어의 위치를 사용하고 있습니다.나는 이 용어가 혼란스러워서 좋아하지 않는다.정수 위치는 보다 알기 쉽고 정확하게 다음과 같습니다..iloc의 약자입니다.여기서 키워드는 INTEGER입니다.정수 위치를 선택할 때는 정수를 사용해야 합니다.

개요를 표시하기 전에 모두 확인합시다.

.ix는 권장되지 않으며 모호하므로 절대 사용하지 마십시오.

판다에게는 세 가지 주요 지표가 있다.인덱스 연산자 자체(괄호), 및 가 있습니다.요약하면 다음과 같습니다.

  • [] - 주로 열의 하위 집합을 선택하지만 행도 선택할 수 있습니다.행과 열을 동시에 선택할 수 없습니다.
  • .loc - 행 및 열의 부분 집합을 레이블별로만 선택합니다.
  • .iloc - 행과 열의 하위 집합을 정수 위치별로만 선택합니다.

거의 사용하지 않습니다.또는 기능이 추가되지 않고 약간의 퍼포먼스만 향상됩니다.시간이 많이 걸리는 어플리케이션이 없다면 사용을 권장하지 않겠습니다.어쨌든, 그 개요는 다음과 같습니다.

  • .at 는 DataFrame 내의 단일 스칼라 값을 라벨별로만 선택합니다.
  • .iat 정수 위치만 사용하여 DataFrame 내의 단일 스칼라 값을 선택합니다.

라벨 및 정수 위치에 의한 선택과 더불어 부울 인덱싱이라고도 하는 부울 선택이 존재합니다.


: ★★★.loc,.iloc 및 , " " " ".at ★★★★★★★★★★★★★★★★★」.iat에 나타냅니다.

'어울리지 않다'의 하겠습니다..loc ★★★★★★★★★★★★★★★★★」.iloc차이에 대해 설명하기 전에 Data Frames에는 각 열과 각 행을 식별하는 데 도움이 되는 라벨이 있다는 것을 이해하는 것이 중요합니다.데이터 프레임의 예를 보겠습니다.

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 ★★★★★★★★★★★★★★★★★」Cornelia4열과 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'

★★★★★★★★★★★★★★에 의한 선택.at ★★★★★★★★★★★★★★★★★」.iat

선택 with를 사용한 .at .loc, DataFrame입니다.보통 이 셀을 스칼라 값이라고 부릅니다.「」를 .at행 라벨과 컬럼라벨을 모두 콤마로 구분하여 전달합니다.

df.at['Christina', 'color']
'black'

선택 with를 사용한 .iat .iloc아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 맞다..

df.iat[2, 5]
'FL'
df = pd.DataFrame({'A':['a', 'b', 'c'], 'B':[54, 67, 89]}, index=[100, 200, 300])

df

                        A   B
                100     a   54
                200     b   67
                300     c   89
In [19]:    
df.loc[100]

Out[19]:
A     a
B    54
Name: 100, dtype: object

In [20]:    
df.iloc[0]

Out[20]:
A     a
B    54
Name: 100, dtype: object

In [24]:    
df2 = df.set_index([df.index,'A'])
df2

Out[24]:
        B
    A   
100 a   54
200 b   67
300 c   89

In [25]:    
df2.ix[100, 'a']

Out[25]:    
B    54
Name: (100, a), dtype: int64

작은 df부터 시작합시다.

import pandas as pd
import time as tm
import numpy as np
n=10
a=np.arange(0,n**2)
df=pd.DataFrame(a.reshape(n,n))

우리는 그렇게 할 것이다.

df
Out[25]: 
        0   1   2   3   4   5   6   7   8   9
    0   0   1   2   3   4   5   6   7   8   9
    1  10  11  12  13  14  15  16  17  18  19
    2  20  21  22  23  24  25  26  27  28  29
    3  30  31  32  33  34  35  36  37  38  39
    4  40  41  42  43  44  45  46  47  48  49
    5  50  51  52  53  54  55  56  57  58  59
    6  60  61  62  63  64  65  66  67  68  69
    7  70  71  72  73  74  75  76  77  78  79
    8  80  81  82  83  84  85  86  87  88  89
    9  90  91  92  93  94  95  96  97  98  99

여기에서는, 다음과 같은 것이 있습니다.

df.iloc[3,3]
Out[33]: 33

df.iat[3,3]
Out[34]: 33

df.iloc[:3,:3]
Out[35]: 
    0   1   2   3
0   0   1   2   3
1  10  11  12  13
2  20  21  22  23
3  30  31  32  33



df.iat[:3,:3]
Traceback (most recent call last):
   ... omissis ...
ValueError: At based indexing on an integer index can only have integer indexers

따라서 서브셋에는 .iat를 사용할 수 없습니다.여기서는 .iloc만 사용해야 합니다.

하지만 둘 다 더 큰 df에서 선택하고 속도를 확인해 봅시다.

# -*- coding: utf-8 -*-
"""
Created on Wed Feb  7 09:58:39 2018

@author: Fabio Pomi
"""

import pandas as pd
import time as tm
import numpy as np
n=1000
a=np.arange(0,n**2)
df=pd.DataFrame(a.reshape(n,n))
t1=tm.time()
for j in df.index:
    for i in df.columns:
        a=df.iloc[j,i]
t2=tm.time()
for j in df.index:
    for i in df.columns:
        a=df.iat[j,i]
t3=tm.time()
loc=t2-t1
at=t3-t2
prc = loc/at *100
print('\nloc:%f at:%f prc:%f' %(loc,at,prc))

loc:10.485600 at:7.395423 prc:141.784987

따라서 .loc에서는 서브셋을 관리할 수 있고 .loc에서는 단일 스칼라로만 관리할 수 있지만 .at이 .loc보다 빠릅니다.

:-)

해 주십시오..loc.[]:

테스트 스크립트:

import os
import sys
from timeit import timeit

import numpy as np
import pandas as pd


def setup():
    arr = np.arange(0, 10 ** 2)
    return pd.DataFrame(arr.reshape(10, 10))


if __name__ == "__main__":
    print(f"Python: {sys.version}")
    print(f"Numpy: {np.__version__}")
    print(f"Pandas: {pd.__version__}")

    iters = 10000

    print(
        "[] Method:",
        timeit(
            "data = df[0]",
            setup="from __main__ import setup; df = setup()",
            number=iters,
        ),
    )
    print(
        ".loc() Method:",
        timeit(
            "data = df.loc[:, 0]",
            setup="from __main__ import setup; df = setup()",
            number=iters,
        ),
    )

출력:

Python: 3.8.10 (tags/v3.8.10:3d8993a, May  3 2021, 11:48:03) [MSC v.1928 64 bit (AMD64)]
Numpy: 1.21.1
Pandas: 1.3.3
[] Method: 0.0923579000000001
.loc() Method: 0.6762988000000001

언급URL : https://stackoverflow.com/questions/28757389/pandas-loc-vs-iloc-vs-at-vs-iat

반응형