이번 포스팅은 Python pandas 마스터하기 위한 두 번째 포스팅입니다. 이번 포스팅 내용을 학습하기 전에 이전 포스팅(htPython pandas 마스터하기 1 ~10) 내용을 학습하시기 바랍니다. 간단한 예제 코드와 설명을 포함한 100가지 Python pandas 코드 중 No 11 ~ 20개에 대해서 살펴보겠습니다.
DataFrame에서 결측치 제거 방법
sortedFilteredSelectedColumns.dropna(inplace = True)
sortedFilteredSelectedColumns
-----------------------------------------------------------------------
crno corpRegMrktDcdNm fncoEmpeCnt newFncoEmpeCnt
75 1101110108484 유가 17992 323712064
346 1101112365321 기타 17083 291828889
36 1101110023393 기타 14268 203575824
755 1101350000903 유가 13901 193237801
19 1101110012809 기타 13635 185913225
... ... ... ... ...
985 1801110750893 유가 110 12100
140 1101110296073 유가 109 11881
97 1101110133572 기타 108 11664
357 1101112614786 기타 108 11664
491 1101114127034 기타 107 11449
이 코드는 DataFrame인 sortedFilteredSelectedColumns에서 결측치가 있는 행을 제거합니다. inplace = True 매개변수는 변경 사항을 sortedFilteredSelectedColumns에 직접 적용합니다. 모든 열에 결측치가 존재하지 않아, 결과는 변하지 않습니다.
DataFrame에서 결측치 대체 방법
pivotDf.fillna(0, inplace = True)
------------------------------------------
직업 자영업 학생 회사원 ageTotal
성별
Female 0.0 35.0 0.0 35.0
Male 40.0 0.0 45.0 85.0
여기서는 DataFrame인 pivotDf의 모든 열의 결측치를 0으로 채우는 코드를 보여드립니다. inplace = True 매개변수를 사용하여 변경 사항을 DataFrame에 직접 적용합니다.
열에 대한 산술 연산을 수행하는 방법
pivotDf['ageTotal'] = pivotDf['자영업'] + pivotDf['학생'] + pivotDf['회사원']
pivotDf
------------------------------------------
직업 자영업 학생 회사원 ageTotal
성별
Female 0.0 35.0 0.0 35.0
Male 40.0 0.0 45.0 85.0
이 코드는 DataFrame인 pivotDf의 ‘자영업’과 ‘학생’과 ‘회사원’를 요소 별로 합하여 결과를 새로운 ‘ageTotal’ 열에 할당합니다.
열에 문자열 연산을 적용하는 방법
finalData2['newColumn'] = finalData2['성별'].str.upper()
finalData2
----------------------------------------------------------
이름 성별 직업 newColumn
0 철수 Male 회사원 MALE
1 영희 Female 학생 FEMALE
2 영남 Male 자영업 MALE
DataFrame인 finalData2의 ‘성별’ 열의 값에 upper() 문자열 메서드를 적용하고 결과를 새로운 ‘newColumn’ 열에 저장하는 코드입니다.
DataFrame을 melt() 함수를 사용하여 재구성하는 방법
meltedDf = pd.melt(pivotDf.reset_index(), id_vars='성별', value_vars=['자영업', '학생', '회사원'], var_name='직업', value_name='나이')
meltedDf
---------------------------------
성별 직업 나이
0 Female 자영업 0.0
1 Male 자영업 40.0
2 Female 학생 35.0
3 Male 학생 0.0
4 Female 회사원 0.0
5 Male 회사원 45.0
DataFrame인 pivotDf의 인덱스 초기화(pivotDf.reset_index()) 이후 다중 열을 하나의 열로 녹이는 방식으로 DataFrame을 다시 구성합니다. ‘성별’ 열은 식별자로 유지되며, ‘자영업’과 ‘학생’과 ‘회사원’은 행으로 나열하기 위한 열이며, ‘직업’과 ‘나이’는 새로운 열에 할당된 이름입니다.
행 또는 열을 가로지르는 작업을 수행하는 방법
rowSum = pivotDf.sum(axis = 1)
rowSum
-------------------------------
성별
Female 70.0
Male 170.0
dtype: float64
이 코드는 DataFrame인 pivotDf의 각 행에 대한 값의 합계를 계산합니다. axis=1 매개변수는 행을 따라 모든 열의 합계를 계산해야 함을 나타냅니다.
DataFrame에 사용자 정의 함수를 적용하는 방법
def custom_function(row):
return row['나이'] * 2
meltedDf['NewColumn'] = meltedDf.apply(custom_function, axis = 1)
meltedDf
-------------------------------------------
성별 직업 나이 NewColumn
0 Female 자영업 0.0 0.0
1 Male 자영업 40.0 80.0
2 Female 학생 35.0 70.0
3 Male 학생 0.0 0.0
4 Female 회사원 0.0 0.0
5 Male 회사원 45.0 90.0
custom_function는 ‘나이’에서 계산을 수행하는 행을 입력으로 받는 사용자 정의 함수입니다. 그런 다음 apply() 메서드를 사용하여 이 함수를 DataFrame인 meltedDf의 각 행에 적용하고 결과를 ‘NewColumn’이라는 새 열에 할당합니다.
DataFrame을 NumPy 배열로 변환하는 방법
pivotDfNpArray = pivotDf.to_numpy()
pivotDfNpArray
---------------------------------
array([[ 0., 35., 0., 35.],
[40., 0., 45., 85.]])
DataFrame인 pivotDfNpArray를 NumPy 배열인 pivotDfNpArray로 변환합니다. 이렇게 하면 다른 수치 연산 및 과학 계산 라이브러리와의 통합을 용이하게 해줍니다.
DataFrame에서 열 이름을 바꾸는 방법
meltedDf.rename(columns={'나이': '성별'}, inplace=True)
meltedDf
-------------------------------------------
성별 직업 성별 NewColumn
0 Female 자영업 0.0 0.0
1 Male 자영업 40.0 80.0
2 Female 학생 35.0 70.0
3 Male 학생 0.0 0.0
4 Female 회사원 0.0 0.0
5 Male 회사원 45.0 90.0
이 코드는 DataFrame인 meltedDf의 ‘나이’ 열을 ‘성별’로 이름을 변경합니다. inplace=True를 사용하여 변경 사항을 DataFrame에 직접 적용합니다.
DataFrame을 CSV 파일로 저장하는 방법
meltedDf.to_csv('D:/output.csv', index=False, encoding = 'UTF-8-sig')
DataFrame인 meltedDf를 D드라이브에 ‘output.csv’라는 이름의 CSV 파일로 저장합니다. index = False 매개변수는 저장된 파일에서 인덱스 열을 제외합니다. encoding = ‘UTF-8-sig’ 은 DataFrame에 한글이 있을 경우, 한글 깨짐 현상을 막아줍니다.
지금까지 100가지 Python pandas 예제 중 처음 20가지 주요 함수 및 예제 코드를 설명했습니다. 다음 부분에서는 더 많은 예제 코드와 자세한 설명을 계속 다룰 예정이니 많은 기대 부탁 드립니다.
(Python Pandas 마스터하기 21 ~ 30 바로가기)
감사합니다!