이번 포스팅은 Python pandas 마스터하기 위한 네번째 포스팅입니다. 이번 포스팅 내용을 학습하기 전에 이전 포스팅(Python pandas 마스터하기 1 ~10, Python pandas 마스터하기 11 ~20, Python pandas 마스터하기 21 ~30) 내용을 먼저 학습하시기 바랍니다. 간단한 예제 코드와 설명을 포함한 100가지 Python pandas 코드 중 No 31 ~ 40개에 대해서 살펴보겠습니다.
31. 데이터프레임의 인덱스 재설정하기
먼저 실습에 활용할 임시 데이터를 생성합니다.
import pandas as pd
tempdata = {'이름': ['철수', '영희', '영남'],
'나이': [45, 35, 40],
'고향': ['서울', '부산', '인천']}
# 인덱스가 'one','two','three'인 finalData DataFrame 생성하기
finalData = pd.DataFrame(tempdata1, index = ['one','two','three'])
finalData
------------------------------
이름 나이 고향
one 철수 45 서울
two 영희 35 부산
three 영남 40 인천
데이터프레임 인덱스 재설정
import pandas as pd
finalDataReset = finalData.reset_index()
# 인덱스가 리셋된 데이터프레임 출력
print("DataFrame with Reset Index:")
finalDataReset
-------------------------------------------
DataFrame with Reset Index:
index 이름 나이 고향
0 one 철수 45 서울
1 two 영희 35 부산
2 three 영남 40 인천
index 칼럼명을 가지는 칼럼이 새로 생성되고, 디폴트 인덱스인 숫자 0,1,2 가 생성되었습니다.
32. applymap()을 사용하여 DataFrame에 사용자 정의 함수 적용
import pandas as pd
def custom_function(x):
return x * 2
# 데이터프레임에 사용자 정의 함수 적용
finalDataModify = finalData.applymap(custom_function)
finalDataModify
---------------------------------------------------------
이름 나이 고향
one 철수철수 90 서울서울
two 영희영희 70 부산부산
three 영남영남 80 인천인천
applymap() 함수는 사용자 정의 함수를 데이터프레임 finalData에 요소 별로 적용하는 데 사용됩니다. 각 요소에 사용자 정의 함수가 적용된 새 데이터프레임 finalDataModify를 반환합니다. 숫자형 칼럼은 연산이 적용되었고, 문자형 칼럼의 경우에는 동일 문자가 2번 반복되었습니다.
33. 여러 칼럼을 기반으로 두 개의 데이터프레임 병합
tempdata2 = pd.DataFrame(
{'이름': ['철수', '영희', '영남'],
'점수': [85, 97, 100],
'학점': ['B', 'A', 'A+']
}
)
# 병합하기 위한 칼럼 정의 Define the columns to merge on
mergeColumns = ['이름']
# 위에서 정의한 칼럼을 기반으로 데이터프레임 병합
finalDataMerge = pd.merge(finalData, tempdata2 , on=mergeColumns)
finalDataMerge
-------------------------------------------------------------------
이름 나이 고향 점수 학점
0 철수 45 서울 85 B
1 영희 35 부산 97 A
2 영남 40 인천 100 A+
pd.merge() 함수는 지정된 병합 컬럼을 기반으로 데이터프레임 finalData 및 tempdata2를 mergeColumns 기준으로 병합합니다. 병합된 결과 데이터프레임을 finalDataMerge 객체에 할당합니다.
34. 하위 문자열 일치를 기반으로 한 데이터프레임의 행 필터링
import pandas as pd
# 일치여부를 확인하기 위한 문자열 정의
substring = '서'
# 하위 문자열 일치를 기반으로 한 행 필터링
finalDataFilter = finalData[finalData['고향'].str.contains(substring, case = False)]
finalDataFilter
-------------------------------------------------------------------------------------
이름 나이 고향
one 철수 45 서울
str.contains() 함수를 사용하여 해당 열의 각 요소에 하위 문자열이 있는지 확인합니다. case = False 매개변수는 대소문자를 구분하지 않도록 하는 옵션입니다.
35. 데이터프레임에 있는 열의 누적 합계 계산
import pandas as pd
# 누적합계 계산을 원하는 칼럼 명시
column = '나이'
# 누적합 계산
cumulativeSum = finalData[column].cumsum()
# 데이터프레임에 '누적합' 칼럼을 생성하여 누적 합계값 저장
finalData['나이누적합'] = cumulativeSum
finalData
---------------------------------------------------------
이름 나이 고향 나이누적합
one 철수 45 서울 45
two 영희 35 부산 80
three 영남 40 인천 120
cumsum() 함수는 데이터프레임 finalData에 지정된 열의 누적 합계를 계산합니다. 그런 다음 누적 합계는 새 변수 ‘나이누적합’에 할당니다.
36. DataFrame에 있는 열의 데이터 유형 변환
import pandas as pd
# 데이터 유형 확인
print("Initial Data Types:")
finalData.dtypes
-----------------------------------
Initial Data Types:
이름 object
나이 int64
고향 object
나이누적합 int64
dtype: object
‘나이’ 칼럼의 데이터 유형을 int8로 변환
finalData['나이'] = finalData['나이'].astype('int8')
# 데이터 유형 재확인
finalData.dtypes
----------------------------------
이름 object
나이 int8
고향 object
나이누적합 int64
dtype: object
‘나이’ 칼럼의 데이터 유형이 ‘int64’ 에서 ‘int8’로 변환되었습니다.
참고: 열의 데이터가 원하는 데이터 유형으로 변환 가능한 지 먼저 확인해야 합니다. 그렇지 않으면 오류나 예상치 못한 결과가 발생할 수 있습니다.
37. 열의 최대값을 기준으로 데이터프레임 행 필터링
import pandas as pd
# '나이' 칼럼의 최대값을 maxValue 객체에 저장
maxValue = finalData['나이'].max()
# 최대값을 기반으로 행 필터링
finalDataRowfilter = finalData[finalData['나이'] == maxValue]
finalDataRowfilter
----------------------------------------------------------------
이름 나이 고향 나이누적합
one 철수 45 서울 45
maxValue = finalData[‘나이’].max()는 지정된 열(‘나이’)에서 최대값을 찾고, finalData[‘나이’] == max_value는 ‘나이’ 칼럼의 값이 최대값과 일치하는 행을 필터링하는 부울 변수를 생성합니다.
38. 서로 다른 결합 유형(inner, outer, left, right)을 기반으로 두 개의 데이터프레임 병합
import pandas as pd
# 간단한 데이터프레임 2개 생성
df1 = pd.DataFrame({'A': [1, 2, 3],
'B': ['a', 'b', 'c']})
df2 = pd.DataFrame({'A': [3, 4, 5],
'C': ['d', 'e', 'f']})
# 병합 유형에 따른 데이터 병합
innerJoin = pd.merge(df1, df2, on = 'A', how = 'inner')
print(innerJoin)
outerJoin = pd.merge(df1, df2, on = 'A', how = 'outer')
print(outerJoin)
leftJoin = pd.merge(df1, df2, on = 'A', how = 'left')
print(leftJoin)
rightJoin = pd.merge(df1, df2, on = 'A', how = 'right')
print(rightJoin)
---------------------------------------------------------------
A B C
0 3 c d
A B C
0 1 a NaN
1 2 b NaN
2 3 c d
3 4 NaN e
4 5 NaN f
A B C
0 1 a NaN
1 2 b NaN
2 3 c d
A B C
0 3 c d
1 4 NaN e
2 5 NaN f
pd.merge() 함수는 how 인수에 따라 다양한 유형의 데이터 결합을 수행합니다. 이 프로그램에서 설명하는 네 가지 조인 유형은 다음과 같습니다.
- inner join: 지정된 열(‘A’)을 기반으로 두 데이터프레임의 값이 일치하는 행만 포함합니다.
- outer join: 외부 조인: 두 데이터프레임의 모든 행을 포함하고 일치하는 항목이 없는 경우 누락된 값을 NaN으로 채웁니다.
- left join: 왼쪽 데이터프레임(df1)의 모든 행을 포함하고 오른쪽 데이터프레임(df2)의 누락된 값을 NaN으로 채웁니다.
- right join: 오른쪽 데이터프레임(df2)의 모든 행을 포함하고 왼쪽 데이터프레임(df1)에서 누락된 값을 NaN으로 채웁니다.
39. 데이터프레임의 값에서 선행 및 후행 공백 제거
import pandas as pd
# df 라고 하는 데이터프레임이 있다고 가정
# 모든 칼럼의 선행, 후행 공백 제거
df = df.applymap(lambda x: x.strip() if isinstance(x, str) else x)
applymap() 함수는 데이터프레임의 각 요소에 lambda 함수를 적용합니다. lambda 함수는 요소가 문자열(isinstance(x, str))인지 확인하고, 문자열이면 Strip() 함수를 사용하여 앞뒤 공백을 제거합니다. 요소가 문자열이 아닌 경우 요소는 변경되지 않은 상태로 유지됩니다.
40. 데이터프레임을 JSON 파일로 변환
import pandas as pd
# 데이터프레임을 json 파일로 변환
jsonData = finalData.to_json(orient='records')
# jsonData를 file로 저장하기
with open('D:/output.json', 'w') as file:
file.write(jsonData)
# D드라이브에 생성된 output.json 파일 확인
to_json() 함수는 데이터프레임 finalData를 JSON 문자열로 변환합니다. orient=’records’ 매개변수는 데이터프레임의 각 행이 별도의 JSON 개체로 표시되도록 합니다. 그런 다음 쓰기 모드에서 open() 함수를 사용하여 JSON 데이터를 D드라이브에 ‘output.json’이라는 파일에 저장합니다.
이번 포스팅에서는 Python Pandas 마스터하기 위한 네 번째 시간을 가졌습니다. 다음 포스팅도 기대해 주세요.
(Python Pandas 마스터하기 41 ~ 50 바로가기)
감사합니다!!