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 바로가기)
감사합니다!