programing

Pandas/Python에서 열을 필터링하기 위해 loc을 사용하는 것과 대괄호만 사용하는 것의 차이점은 무엇입니까?

cafebook 2023. 7. 17. 21:24
반응형

Pandas/Python에서 열을 필터링하기 위해 loc을 사용하는 것과 대괄호만 사용하는 것의 차이점은 무엇입니까?

Pandas DataFrame에서 열을 선택하는 세 가지 방법이 있습니다.

loc을 사용하여 열을 선택하는 첫 번째 방법:

df_new = df.loc[:, 'col1']

두 번째 방법 - 더 간단하고 빨라 보입니다.

df_new = df['col1']

세 번째 방법 - 가장 편리합니다.

df_new = df.col1

이 세 가지 방법 사이에 차이점이 있습니까?저는 그렇게 생각하지 않습니다, 그렇다면 제가 세 번째 방법을 사용하는 것이 낫겠습니다.

저는 왜 같은 일을 하는 데 세 가지 방법이 있는 것처럼 보이는지가 가장 궁금합니다.

다음과 같은 경우에는 동일하게 동작합니다.

  1. 단일 열 선택(df['A']와 동일합니다.df.loc[:, 'A']-> A열 선택)
  2. 열 목록 선택(df[['A', 'B', 'C']]와 동일합니다.df.loc[:, ['A', 'B', 'C']]-> A, B, C 열 선택)
  3. 행별 슬라이싱(df[1:3]와 동일합니다.df.iloc[1:3]-> 1행과 2행을 선택합니다.그러나 행을 분할하는 경우loc대신에ilocRangeIndex가 있다고 가정하면 1, 2, 3행이 표시됩니다.자세한 내용은 여기를 참조하십시오.)

하지만,[]는 다음과 같은 경우에는 작동하지 않습니다.

  1. 다음을 사용하여 단일 행을 선택할 수 있습니다.df.loc[row_label]
  2. 행 목록을 선택할 수 있습니다.df.loc[[row_label1, row_label2]]
  3. 다음을 사용하여 열을 자를 수 있습니다.df.loc[:, 'A':'C']

이 세 가지는 할 수 없습니다.[]더 중요한 것은 선택 항목에 행과 열이 모두 포함된 경우 할당에 문제가 있다는 것입니다.

df[1:3]['A'] = 5

그러면 행 1과 행 2가 선택되고 반환되는 개체의 열 'A'가 선택되고 값 5가 할당됩니다.문제는 반환되는 개체가 복사본일 수 있기 때문에 실제 데이터 프레임이 변경되지 않을 수 있다는 것입니다.이렇게 하면 SettingWithCopyWarning이 발생합니다.올바른 할당 방법은 다음과 같습니다.

df.loc[1:3, 'A'] = 5

와 함께.loc원본 DataFrame을 수정할 수 있습니다.또한 열을 슬라이스할 수 있습니다.df.loc[:, 'C':'F']), 단일 행 선택(df.loc[5]), 행 목록을 선택합니다(df.loc[[1, 2, 5]]).

또한 이 두 가지는 동시에 API에 포함되지 않았습니다. .loc훨씬 나중에 보다 강력하고 명시적인 인덱서로 추가되었습니다.자세한 내용은 unutbu의 답변을 참조하십시오.


참고: 열 가져오기[].전혀 다른 주제입니다. .편의를 위해서만 존재합니다.이름이 유효한 Python 식별자인 열에만 액세스할 수 있습니다(즉, 열에는 공백을 포함할 수 없고 숫자로 구성할 수 없습니다...).이름이 Series/DataFrame 메서드와 충돌하는 경우에는 사용할 수 없습니다.또한 존재하지 않는 열(즉, 할당)에 사용할 수 없습니다.df.a = 1열이 a그에 , ) 그에는외,,.그리고.[]똑같습니다.

loc인덱스가 숫자가 아닐 때 특히 유용합니다(예: Datetime).인덱스)는 인덱스에서 특정 레이블이 있는 행을 가져올 수 있기 때문입니다.

df.loc['2010-05-04 07:00:00']
df.loc['2010-1-1 0:00:00':'2010-12-31 23:59:59 ','Price']

지만하[]는 다음과 같은 특정 이름을 가진 열을 가져옵니다.

df['Price']

와 함께[]행을 필터링할 수도 있지만 다음과 같이 더욱 정교합니다.

df[df['Date'] < datetime.datetime(2010,1,1,7,0,0)]['Price']

다음 중 사용 사례에 권장되는 방법이 무엇인지 혼란스럽다면 판다 튜토리얼의 간단한 지침을 살펴보십시오.

  • 데이터 부분 집합을 선택할 때, 대괄호[]사용됩니다.

  • 이러한 괄호 안에는 단일 열/행 레이블, 열/행 레이블 리스트, 레이블 조각, 조건식 또는 콜론을 사용할 수 있습니다.

  • 사또 특행및정 / 는선열을 사용하여 행 열 loc과 열 을 사용할 에는 다음과 같이 지정합니다.

  • 사또 특행및정 / 는선열을 사용하여 행 열 iloc의 할 때

  • 다음을 기준으로 선택 항목에 새 을 할당할 수 있습니다.loc/iloc.

사용 사례의 차이를 더욱 명확히 하기 위해 몇 가지 요점을 강조했습니다.

여러 열로 데이터 프레임을 생성할 때 df.loc[]와 df[] 사이에 차이가 있는 것 같습니다.

다음 질문을 참조할 수 있습니다..loc을 사용하여 여러 열을 생성하는 좋은 방법이 있습니까?

여서는다사여용열수없생다습니성러를 사용하여 여러 수 .df.loc[:,['name1','name2']]하지만 당신은 더블 브라켓을 사용하는 것만으로 할 수 있습니다.df[['name1','name2']](저는 그들이 왜 다르게 행동하는지 궁금합니다.)

언급URL : https://stackoverflow.com/questions/48409128/what-is-the-difference-between-using-loc-and-using-just-square-brackets-to-filte

반응형