기억저장소

기억저장소

Python 데이터사이언스

Pandas 주요 라이브러리 정리 (GPT4)

roaminpixel 2024. 4. 19. 15:45
728x90

ser_u = df_q1["Speaker"].drop_duplicates()

ser_u = df_q1["Speaker"].drop_duplicates() 코드는 Pandas 라이브러리를 사용하여 df_q1 데이터프레임에서 "Speaker" 컬럼의 중복된 값을 제거하고, 그 결과를 ser_u라는 새로운 변수에 저장하는 작업을 수행합니다. 이 과정을 자세히 설명드리겠습니다.

 


ser_u[ser_u.str.contains("[0-9]{2,3} Hz")]

  • .str: Pandas에서 제공하는 문자열 메소드에 접근하기 위한 속성입니다. 이를 사용하면 문자열에 대한 다양한 연산을 수행할 수 있습니다.
  • contains("[0-9]{2,3} Hz"): contains 메소드는 주어진 정규 표현식 패턴을 포함하는지 여부를 확인합니다. 이 경우, 패턴은 [0-9]{2,3} Hz입니다.
    • [0-9]{2,3}: 숫자가 연속해서 2개 이상 3개 이하로 나타나는 패턴을 의미합니다. 예를 들어 12, 123 등이 해당됩니다.
    • Hz: 문자열 "Hz"가 이 숫자 뒤에 바로 나타나야 합니다.
  • 이 정규 표현식은 즉, "100 Hz", "50 Hz" 등과 같이 스피커의 주파수 사양을 나타내는 문자열을 찾는데 사용됩니다.
  •  

df_q1["hz_cnt"].value_counts()

df_q1["hz_cnt"].value_counts()는 Pandas 라이브러리를 사용하여 df_q1 데이터프레임의 "hz_cnt" 컬럼에 저장된 각 값이 몇 번 나타나는지를 계산하는 코드입니다. 이 함수는 해당 컬럼의 각 고유 값에 대한 빈도수를 반환합니다.


 

df_q1_sub = df_q1.loc[df_q1["hz_cnt"] != 0, ].reset_index(drop = True)

단계별 설명:

  1. 조건 필터링:
    • df_q1["hz_cnt"] != 0: df_q1 데이터프레임의 "hz_cnt" 컬럼에서 값이 0이 아닌 모든 행을 찾습니다. "hz_cnt" 컬럼은 각 행에서 특정 조건(예: "Hz" 문자열의 포함 여부)을 만족하는 컬럼의 개수를 나타내므로, 여기서 0이 아닌 경우는 해당 조건을 만족하는 컬럼이 하나 이상 있다는 의미입니다.
  2. 행 선택:
    • df_q1.loc[df_q1["hz_cnt"] != 0, ]: 이 코드는 위에서 정의한 조건을 만족하는 행들만 선택합니다. .loc[]는 행 또는 컬럼을 선택할 때 사용되는 Pandas의 인덱싱 방법 중 하나입니다. 여기서는 특정 조건에 부합하는 행만을 선택하고 있습니다.
  3. 인덱스 재설정:
    • .reset_index(drop=True): 이 메소드는 선택된 데이터프레임의 인덱스를 0부터 시작하는 새로운 연속적인 정수로 재설정합니다. drop=True 옵션은 기존 인덱스를 새로운 컬럼으로 추가하지 않고 버리는 것을 의미합니다. 이는 데이터를 필터링 한 후 남은 행의 인덱스가 불연속적이 되었을 때 유용하게 사용됩니다.
더보기

.loc[]는 데이터프레임에서 행 레이블 또는 불리언 배열을 기반으로 행을 선택하는 데 사용됩니다.

첫 번째에는 행에 관련된 데이터를, 두 번째에는 열에 관련한 컬럼의 데이터를 넣어줘야합니다.


 

ser = df_q1_sub.iloc[:, :3].apply(lambda x: x.str.contains("60 Hz").sum(),axis = 1)

 

단계별 설명:

  1. 열 선택:
    • df_q1_sub.iloc[:, :3]: 이 코드는 df_q1_sub 데이터프레임에서 첫 세 열(0, 1, 2)을 선택합니다. iloc는 위치 기반 인덱싱을 사용하여 데이터를 선택할 때 사용되며, :는 모든 행을 선택하고, :3는 첫 번째 열부터 세 번째 열까지를 의미합니다.
  2. 함수 적용:
    • .apply(lambda x: x.str.contains("60 Hz").sum(), axis=1): 이 부분은 각 행(axis=1 설정으로 행 방향을 의미)에 대해 함수를 적용합니다. lambda x는 각 행을 입력으로 받는 익명 함수입니다.
    • x.str.contains("60 Hz"): 각 행의 각 셀에 대해 문자열 "60 Hz"를 포함하고 있는지 여부를 확인합니다. 이는 True 또는 False 값의 시리즈를 반환합니다.
    • .sum(): True는 1로, False는 0으로 계산되기 때문에, sum() 함수는 행에서 "60 Hz"를 포함하는 셀의 수를 합산합니다.
  3. 결과 저장:
    • 결과적으로 이 apply 함수는 각 행에서 "60 Hz" 문자열을 포함하는 셀의 개수를 계산하고, 이를 ser라는 새로운 Series 객체에 저장합니다.

결과적 의미:

ser Series 객체에는 df_q1_sub의 첫 세 열에서 각 행별로 "60 Hz"라는 문자열을 포함하는 셀의 수가 저장됩니다. 이 정보는 특정 주파수 값("60 Hz")의 출현 빈도를 분석할 때 유용하게 사용할 수 있습니다. 예를 들어, 특정 전자 제품이 "60 Hz"의 주파수를 얼마나 자주 사용하는지를 평가하는 데 도움이 될 수 있습니다. 이러한 분석은 제품 특성이나 성능 평가에 중요한 요소가 될 수 있습니다.

 


 

 

iloc말고 loc 써도 되나?

 

iloc와 loc는 Pandas에서 데이터를 선택하는 두 가지 주요 방법이며, 각각의 메소드는 서로 다른 유형의 인덱싱을 사용합니다. 따라서 iloc 대신 loc를 사용할 수 있는지는 상황에 따라 다릅니다.

iloc:

  • **iloc**는 정수 기반의 위치 인덱싱을 제공합니다. 즉, 데이터프레임에서 행과 열의 위치를 정수 형태로 지정하여 데이터를 선택할 수 있습니다.
  • 예: df.iloc[0:5, 0:3]는 데이터프레임의 첫 다섯 행과 첫 세 열을 선택합니다.

loc:

더보기

Pandas의 loc 연산자를 사용할 때, 콤마(,)는 행과 열을 구분하는 구분자 역할을 합니다. loc 연산자는 데이터프레임의 행과 열을 선택할 때 사용되며, 대괄호 안에 행과 열의 선택 조건을 콤마로 구분하여 지정합니다.

  • **loc**는 레이블 기반의 인덱싱을 사용합니다. 이는 데이터프레임의 인덱스나 컬럼명을 기반으로 데이터를 선택할 수 있게 해줍니다.
  • 예: df.loc[0:4, "age"]는 인덱스 0부터 4까지의 "age" 컬럼의 데이터를 선택합니다. 주의할 점은 loc는 종료 지점을 포함합니다.

iloc 대신 loc 사용하기:

iloc을 사용하는 코드를 loc으로 변경하는 것이 가능하려면, 해당 데이터프레임의 인덱스와 컬럼명을 정확히 알아야 합니다. 예를 들어, iloc[:, :3] 대신 loc를 사용하려면, 선택하려는 컬럼의 이름을 알아야 하며, 행 선택에 대해서도 인덱스 레이블을 사용해야 합니다.

 

 

loc을 사용하여 동일한 결과를 얻으려면, 컬럼의 이름을 정확히 지정해야 하며, 행 선택에 대해서도 인덱스 레이블 범위를 정확히 지정해야 합니다. 따라서, iloc을 loc으로 변경하려면 데이터의 구조를 잘 알고 있어야 합니다.

요약하면, iloc 대신 loc을 사용할 수 있지만, 인덱스와 컬럼 레이블을 사용해야 하며 종료 지점을 포함하는 특성을 고려해야 합니다. 이는 때때로 코드를 복잡하게 만들 수 있으므로, 각 메소드의 특성을 이해하고 상황에 맞게 선택하는 것이 중요합니다.

 


 

 

df_q3 = df.loc[~df["channel"].str.contains("Pixel|Oper"), ].reset_index(drop = True)

 

 

코드 분석:

  1. 조건 필터링:
    • df["channel"].str.contains("Pixel|Oper"): df 데이터프레임의 "channel" 컬럼에서 문자열 메소드 str.contains()를 사용하여 "Pixel" 또는 "Oper"이라는 문자열을 포함하는 행을 찾습니다. 이 메소드는 각 행이 해당 문자열을 포함하면 True, 포함하지 않으면 False를 반환합니다.
    • ~: 이 연산자는 불리언 결과를 반전시킵니다. 즉, True는 False로, False는 True로 바뀝니다. 따라서 "Pixel" 또는 "Oper"을 포함하는 행이 아닌 행들을 선택하게 됩니다.
  2. 행 선택:
    • df.loc[~df["channel"].str.contains("Pixel|Oper"), ]: loc[] 인덱서를 사용하여 위에서 생성한 조건을 만족하는 행들만을 선택합니다. 여기서 조건은 "channel" 컬럼에서 "Pixel" 또는 "Oper"을 포함하지 않는 행들입니다.
  3. 인덱스 재설정:
    • .reset_index(drop=True): 선택된 행들로 구성된 새로운 데이터프레임의 인덱스를 0부터 시작하는 새로운 정수 인덱스로 재설정합니다. drop=True는 기존 인덱스를 새로운 컬럼으로 추가하지 않고 버리는 것을 의미합니다. 이는 데이터를 필터링한 후 남은 행의 인덱스가 불연속적이 되었을 때 유용하게 사용됩니다.

결과적 의미:

이 코드는 df 데이터프레임에서 "channel" 컬럼의 값에 "Pixel" 또는 "Oper"이 포함되지 않는 행들만을 추출하여 새로운 데이터프레임 df_q3에 저장합니다. 결과적으로 df_q3는 이 조건을 만족하지 않는 행들로만 구성되며, 이 데이터는 추가 분석이나 처리에 사용될 수 있습니다. 이 과정은 데이터에서 특정 조건을 만족하는 부분만을 선택하거나 제외하는 필터링 작업에 자주 사용됩니다.

728x90
반응형