Python Pandas 마스터하기 1 ~ 10

Python pandas는 데이터 과학과 분석 분야에서 널리 사용되는 강력한 데이터 조작 및 분석 라이브러리입니다.
이 라이브러리는 데이터를 효율적으로 처리하고 변환하기 위한 다양한 기능을 제공합니다.
이번 포스팅에서는 Python pandas를 학습하기 위해 간단한 예제 코드와 설명을 포함한 100가지 Python pandas 코드 중 No 1 ~ 10개에 대해서 살펴보겠습니다.

Note:

  • 코드 예제를 실행하기 전에 pandas를 설치해야 합니다.
  • 설치되어 있지 않다면 pip를 사용하여 설치할 수 있습니다.
pip install pandas

총 6개의 포스팅 글을 별도 카테고리로 작성할 예정입니다(Python > Python Pandas 마스터하기).
이번 포스팅은 6개의 글 중 첫 번째 포스팅 글입니다. 예제 코드는 단순한 여러 개의 글로 나누었고, 한 포스팅 글에 너무 많은 내용을 담지 않도록 노력하였습니다.
일부 예제 코드는 공공데이터포털의-금융회사-기본정보-불러오기 포스팅을 통해 가져온 데이터를 활용하였습니다. 내용이 너무 어렵다고 느끼시면, 다른 임시 데이터를 사용하셔서 무방합니다.


딕셔너리로부터 데이터프레임 생성 방법

import pandas as pd

tempdata1 = {'이름': ['철수', '영희', '영남'],
        '나이': [45, 35, 40],
        '고향': ['서울', '부산', '인천']}

finalData1 = pd.DataFrame(tempdata1)
finalData1 
-----------------------------------------------
	이름	나이	고향
0	철수	45	서울
1	영희	35	부산
2	영남	40	인천
tempdata2 = {'이름': ['철수', '영희', '영남'],
        '성별': ['Male', 'Female', 'Male'],
        '직업': ['회사원', '학생', '자영업']}

finalData2 = pd.DataFrame(tempdata2)
finalData2 
----------------------------------------------
        이름	성별	직업
0	철수	Male	회사원
1	영희	Female	학생
2	영남	Male	자영업

이 코드는 열(column) 이름을 나타내는 키(key)와 열 데이터를 나타내는 값(value)으로 구성된 딕셔너리 데이터를 생성한 후(tempdata) pd.DataFrame() 함수를 사용하여 이 딕셔너리 데이터로부터 데이터프레임 finalData를 생성합니다.


CSV 파일을 DataFrame으로 변환하기

import pandas as pd

financeCompany = pd.read_csv('D:/금융회사기본정보조회서비스.csv')

이 코드는 pandas의 read_csv() 함수를 사용하여 D드라이브에 저장되어 있는 금융회사기본정보조회서비스.csv’라는 CSV 파일을 읽고 데이터를 ‘financeCompany’라는 DataFrame에 저장합니다.


DataFrame에서 특정 열(column)을 선택하는 방법

selectedColumns = financeCompany[['crno', 'corpRegMrktDcdNm', 'fncoEmpeCnt']]
selectedColumns
-------------------------------------------------------------------------------
        crno	        corpRegMrktDcdNm	fncoEmpeCnt
0	1101110002959	    유가	                4751
1	1101110002975	    기타	                8663
2	1101110003155	    유가	                1138
3	1101110003204	    유가	                2656
4	1101110003444	    기타	                0
...	...	...	...
1061	2301110182384	기타	                0
1062	2301110273456	기타	                0
1063	2442350009895	기타	                0
1064	2842110054933	기타	                0
1065	2850110385985	기타	                0

이 코드는 DataFrame인 financeCompany에서 특정 열(‘crno’, ‘corpRegMrktDcdNm’, ‘fncoEmpeCnt’)을 선택하여,
이 열들만 포함하는 새로운 DataFrame인 selectedColumns를 생성합니다.


조건에 따라 행(row)을 필터링하는 방법

filteredSelectedColumns = selectedColumns [selectedColumns ['fncoEmpeCnt'] > 100]
filteredSelectedColumns
--------------------------------------------------------
        crno	        corpRegMrktDcdNm	fncoEmpeCnt
0	1101110002959	     유가	                4751
1	1101110002975	     기타	                8663
2	1101110003155	     유가	                1138
3	1101110003204	     유가	                2656
5	1101110003684	     유가	                5773
...	...	...	...
1024	2001110014608	기타	                664
1025	2001110076179	기타	                130
1026	2001110396882	기타	                1730
1036	2101110000043	기타	                1241
1055	2201110000819	유가	                411

이 코드는 DataFrame인 selectedColumns를 특정 조건에 따라 필터링합니다. 이 경우에는 ‘fncoEmpeCnt’ 열이 100보다 큰 행(row)만을 선택합니다. 그 결과로 생성된 DataFrame인 filteredSelectedColumns는 필터링된 행들을 포함하게 됩니다.


DataFrame을 열(column)을 기준으로 정렬하는 방법

sortedFilteredSelectedColumns = filteredSelectedColumns.sort_values(by = 'fncoEmpeCnt', ascending = False)
sortedFilteredSelectedColumns
------------------------------------------------------
        crno	    corpRegMrktDcdNm	fncoEmpeCnt
75	1101110108484	유가	                17992
346	1101112365321	기타	                17083
36	1101110023393	기타	                14268
755	1101350000903	유가	                13901
19	1101110012809	기타	                13635
...	...	...	...
985	1801110750893	유가	                110
140	1101110296073	유가	                109
97	1101110133572	기타	                108
357	1101112614786	기타	                108
491	1101114127034	기타	                107

이 코드는 DataFrame인 filteredSelectedColumns를 ‘fncoEmpeCnt’의 값에 따라 내림차순으로 정렬합니다. 그 결과로 나오는 DataFrame인 sortedFilteredSelectedColumns 는 해당 순서대로 행이 정렬되었습니다.


DataFrame에서 중복된 행을 제거하는 방법

sortedFilteredSelectedColumns.drop_duplicates(inplace = True)
sortedFilteredSelectedColumns
-------------------------------------------------------
        crno	    corpRegMrktDcdNm	fncoEmpeCnt
75	1101110108484	유가	                17992
346	1101112365321	기타	                17083
36	1101110023393	기타	                14268
755	1101350000903	유가	                13901
19	1101110012809	기타	                13635
...	...	...	...
985	1801110750893	유가	                110
140	1101110296073	유가	                109
97	1101110133572	기타	                108
357	1101112614786	기타	                108
491	1101114127034	기타	                107

이 코드는 DataFrame인 sortedFilteredSelectedColumns에서 모든 열이 동일한 중복된 데이터 중 첫 번째 데이터만 남겨 둡니다. inplace = True 매개변수는 DataFrame의 변경된 사항이 DataFrame에 직접 적용되도록 합니다. 즉, sortedFilteredSelectedColumns에서 모든 열이 동일한 중복된 데이터 중 첫 번째 데이터만 남겨두고, 해당 결과를 sortedFilteredSelectedColumns에 저장합니다. 모든 열의 값이 동일한 데이터가 존재하지 않아 결과는 변함이 없습니다.

GroupBy를 사용하여 집계를 수행하는 방법

groupedDf = sortedFilteredSelectedColumns.groupby('corpRegMrktDcdNm')['fncoEmpeCnt'].mean()
groupedDf
----------------------------------------
corpRegMrktDcdNm
기타               1782.255556
유가               2107.129870
코스닥             293.250000
Name: fncoEmpeCnt, dtype: float64

이 코드는 DataFrame인 sortedFilteredSelectedColumns를 ‘corpRegMrktDcdNm’ 열로 그룹화하고 각 그룹별로 ‘fncoEmpeCnt’ 열의 평균 값을 계산하는 방법입니다. 결과로 나오는 Series인 groupedDf에는 평균 값들을 포함하고 있습니다. 이렇게 하면 ‘fncoEmpeCnt’ 열로 그룹화하여 각 그룹의 ‘corpRegMrktDcdNm’ 열 평균을 계산하고, 그 결과를 새로운 Series로 반환합니다.


한 열의 각 요소에 함수를 적용하는 방법

sortedFilteredSelectedColumns['newFncoEmpeCnt'] = sortedFilteredSelectedColumns['fncoEmpeCnt'].apply(lambda x: x**2)
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의 ‘fncoEmpeCnt’ 열의 각 요소에 람다 함수를 적용합니다.
이 예에서는 각 값을 제곱하고 결과를 ‘newFncoEmpeCnt’이라는 새로운 열에 할당합니다.


두 개의 DataFrame을 병합하는 방법

mergedDf = pd.merge(finalData1 , finalData2 , on='이름')
mergedDf 
----------------------------------------------
	이름	나이	고향	성별	직업
0	철수	45	    서울	Male	회사원
1	영희	35	    부산	Female	학생
2	영남	40	    인천	Male	자영업

이 예제에서는 공통 열 ‘이름’을 기준으로 두 개의 DataFrame인 finalData1과 finalData2를 결합하는 방법을 보여줍니다.
결과로 나오는 DataFrame인 mergedDf는 두 DataFrame의 데이터를 결합하여 저장합니다.


DataFrame을 피벗하는 방법

pivotDf = mergedDf.pivot(index = '성별', columns = '직업', values = '나이')
pivotDf
---------------------------
직업	자영업	학생	회사원
성별			
Female	NaN	    35.0	NaN
Male	40.0	NaN	    45.0

이 코드는 ‘성별’으로 지정된 인덱스 열, ‘직업’로 지정된 피벗할 열, ‘나이’로 지정된 값을 가지고 DataFrame인 mergedDf를 피벗합니다. 결과로 나오는 DataFrame pivotDf 는 ‘성별’에 지정된 행을 인덱스로, ‘직업’에 지정된 열을 열로, ‘나이’의 값을 포함합니다.

지금까지 100가지 Python pandas 예제 중 처음 10가지 주요 함수 및 예제 코드를 설명했습니다.
다음 포스팅에서는 더 많은 예제 코드와 자세한 설명을 계속 다룰 예정이니 많은 기대 부탁 드립니다.
(Python Pandas 마스터하기 11 ~ 20 바로가기)
감사합니다!

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다