판다스 데이터프레임 apply 함수 적용 궁금증 해결완료

2024. 2. 27. 16:20학습/시각화

 

[궁금] return값이 없는 함수를 데이터프레임에 적용했을 때, 두 개의 열을 모두 연산하고 남은 None값은 뭘까?



- 각 셀마다 연산식을 적용하고 컬럼 a, b에 대한 return값을 주는 과정이 따로 있나? 라는 궁금함에서 시작된 과정

 

 

- 일단 함수로 print 시켰으니 모든 셀을에 적용했지만 a의 return값은 "None"이다.
- 열을 묶음어서 함수에 적용한다.

- 열이라는 주머니에 [10, 20, 30] 리스트가 있고 for문 돌리는 것과 같다.
- 함수를 돌렸으니 return을 반환해야 하는데 없다? 디폴트 값인 None이 출력된다. (추측)

 

 

- 그렇다면 함수에 대한 return 값 문자열로 부여하고 결과를 재확인했다.

 

 

- 함수에 새로운 변수명을 입력하니 정리가 되었다.

 

 

- return의 유무에 대한 차이를 간단하게 확인했다.

 

 

- 연산이 필요한 함수와 문자열을 반환하는 함수의 적용 값이 다름을 확인했다.

 

[해결] 정리하자면 아래와 같다💡


 

- 숫자형 데이터를 열단위로 연산하고 싶다면 위와 같은 코드를 참고한다.

- 함수에 대한 이해와 데이터프레임에 대한 적용이해가 아직도 부족했음을 배우는 과정이었다.

 

[상담 기록] 소현 튜터님


df= pd.DataFrame({
    'a': [10,120,30,40,50,60],
    'b': ['황제성','주현영','문세윤','유재석','강호동','이수근']
})

[참고] 컬럼별 데이터 형식을 지정합니다. int64=숫자, str=문자열

df['a'].astype(int)
df['b'].astype(str)
print(df)


- 컬럼별 데이터 형식을 지정하는 건 나중(실무)을 위해 꼭 필요한 부분이다.

- return 값을 안줬으니 None이 뜨는 것은 부가적인 설명을 해주는 부분이다.

- 이러한 문제는 df2로 새 변수를 주면 None값이 없어진다.

- dataframe은 2차원이므로, [ ]가 두번 필요하다.

 

 

- df[df['a']>30] 중요하니 꼭 학습해둔다.
- print 는 결괏값을 확인하는 용도지 가공할 수 없다. 때문에 df.groupby(['']).agg(mean) 이렇게 연습 많이 한다.

- mask는 어떻게 사용하는지
- sql에서 join -> python은 뭔지
- sql에서 concat -> python에서는 뭔지 학습한다.

 

[상담 결과] masking, join, concat이란 python에서 무엇일까?


  1. Pandas에서의 Masking이란?
    • Pandas의 DataFrame에서 "masking" 개념이 사용된다.
    • DataFrame에서 "masking"은 특정 조건을 만족하는 행이나 열을 선택하거나 "제외"하는 작업이다.
    • DataFrame의 loc 또는 iloc을 사용하여 조건을 만족하는 데이터를 선택하거나 필터링할 수 있다.
  2. Python에서 SQL의 Join 구현
    • Pandas에서 DataFrame 간의 join 연산을 수행할 수 있다.
    • pd.merge() 함수를 사용하여 두 개의 DataFrame을 특정 열(또는 인덱스)을 기준으로 병합할 수 있다.
    • 예를 들어, pd.merge(df1, df2, on='key')는 두 개의 DataFrame을 'key' 열을 기준으로 조인한다.
  3. Python에서 SQL의  Concat 구현
    • Pandas에서는 여러 개의 DataFrame을 연결할 때 pd.concat() 함수를 사용한다.
    • 이 함수를 사용하여 행 또는 열 방향으로 DataFrame을 연결할 수 있다.
    • 예를 들어, pd.concat([df1, df2], axis=0)는 두 개의 DataFrame을 행 방향으로 연결합니다.

 

둘 다 데이터프레임을 결합시키는 용도라고 한다. 둘의 정확한 구분을 위해 정리해보았다.

 

  1. pd.merge():
    • merge 함수는 두 개의 DataFrame을 특정 "열"(또는 인덱스)을 기준으로 병합한다.
    • 일반적으로 SQL의 JOIN 연산과 유사한 방식으로 작동하며, 특정 "열"의 값을 기준으로 두 DataFrame을 합친다.
    • 이 때, 병합하는 방식은 inner join, outer join, left join, right join 등 다양한 방식을 선택할 수 있습니다.
  2. pd.concat(enate)():
    • concat 함수는 여러 개의 DataFrame을 연결하여 하나의 DataFrame으로 결합한다.
    • 이 함수는 주어진 축을 따라 여러 DataFrame을 연결합니다. 기본적으로 행 방향(axis=0)으로 연결되지만, 열 방향(axis=1)으로도 연결할 수 있다.
    • concat 함수는 데이터를 단순히 연결하기만 하며, 특정 열의 값을 기준으로 조인하는 것이 아니다.
    • 따라서 데이터의 구조가 유지되면서 단순히 이어붙이는 용도로 주로 사용된다는 게 가장 큰 차이다.

[left join -> merge() 예시 코드]

left_join_df = pd.merge(left_df, right_df, on='key', how='left')
print(left_join_df)
💡merge는 특정 "열"의 값을 "기준"으로 병합하는 데 사용되며, concat은 여러 개의 DataFrame을 "단순"히 이어붙이는 데 사용된다고 이해하면 되겠다.