이번 포스팅은 Python pandas 마스터하기 위한 세번째 포스팅입니다. 이번 포스팅 내용을 학습하기 전에 이전 포스팅(Python pandas 마스터하기 1 ~10, Python pandas 마스터하기 11 ~20) 내용을 먼저 학습하시기 바랍니다. 간단한 예제 코드와 설명을 포함한 100가지 Python pandas 코드 중 No 21 ~ 30개에 대해서 살펴보겠습니다.
문자열 열을 소문자로 변환하는 방법
financeCompany['fncoEnsnNmLowCase'] = financeCompany['fncoEnsnNm'].str.lower()
financeCompany[['fncoEnsnNm','fncoEnsnNmLowCase']]
------------------------------------------------------------------------------------
fncoEnsnNm fncoEnsnNmLowCase
0 HANWHA CORP hanwha corp
1 Samsung C&T Corporation samsung c&t corporation
2 HANWHA INVESTMENT&SECURITIES CO.,LTD hanwha investment&securities co.,ltd
3 HANWHA LIFE INSURANCE CO., LTD. hanwha life insurance co., ltd.
4 NaN NaN
... ... ...
1061 IBK Savings Bank Co., ltd ibk savings bank co., ltd
1062 cornerstone asset management cornerstone asset management
1063 suhyup bank suhyup bank
1064 valuesystem investment management valuesystem investment management
1065 BOOKSEOUL CO.,LTD bookseoul co.,ltd
위의 코드는 DataFrame인 financeCompany의 ‘fncoEnsnNm’의 값에 lower() 문자열 메서드를 적용하고, 결과를 새로운 열 ‘fncoEnsnNmLowCase’에 저장하는 코드입니다.
DataFrame에서 행과 열의 수를 계산하는 방법
# DataFrame의 행의 수 계산하기
financeCompanyRows = financeCompany.shape[0]
# DataFrame의 열의 수 계산하기
financeCompanyColumns = financeCompany.shape[1]
# 행과 열의 수 출력하기
print(financeCompany.shape)
print("Number of rows:", financeCompanyRows)
print("Number of columns:", financeCompanyColumns)
------------------------------------------------------
(1066, 37)
Number of rows: 1066
Number of columns: 37
DataFrame에서 행과 열의 수를 세려면 DataFrame 객체의 shape 속성을 사용합니다. shape 속성은 행의 수를 첫 번째 요소로, 열의 수를 두 번째 요소로 갖는 튜플을 반환합니다. 위 코드에서는 financeCompany.shape를 사용하여 DataFrame의 행과 열의 수를 계산했습니다. 그런 다음 이 값을 financeCompanyRows와 financeCompanyColumns 변수에 할당하고 출력하였습니다.
DataFrame을 “피벗(pivot)”을 사용하여 재구성하기
temp = financeCompany.drop_duplicates(['crno','corpRegMrktDcd','isinCd'])
reshapedFinanceCompany = temp.pivot(index = 'crno', columns = 'corpRegMrktDcd', values = 'isinCd')
reshapedFinanceCompany
----------------------------------------------------
corpRegMrktDcd A D E F G P Q
crno
1101110002959 NaN NaN NaN NaN NaN 880.0 NaN
1101110002975 NaN NaN 830.0 NaN NaN NaN NaN
1101110003155 NaN NaN NaN NaN NaN 3530.0 NaN
1101110003204 NaN NaN NaN NaN NaN 88350.0 NaN
1101110003444 NaN NaN 2950.0 NaN NaN NaN NaN
... ... ... ... ... ... ... ...
2301110182384 NaN NaN NaN NaN NaN NaN NaN
2301110273456 NaN NaN NaN NaN NaN NaN NaN
2442350009895 NaN NaN NaN NaN NaN NaN NaN
2842110054933 NaN NaN NaN NaN NaN NaN NaN
2850110385985 NaN NaN NaN NaN NaN NaN NaN
이 예제 코드에서는 피벗(pivot) 함수에 세 가지 인수를 제공합니다.
- index: 재구성된 DataFrame에서 인덱스로 사용할 열을 지정합니다. 이 경우 ‘crno’ 열을 인덱스로 사용합니다.
- columns: 재구성된 DataFrame에서 열 헤더로 사용할 열을 지정합니다. 여기서는 ‘corpRegMrktDcd’ 열을 열 헤더로 사용합니다.
- values: 재구성된 DataFrame에서 값으로 사용할 열을 지정합니다. 이 예에서는 ‘isinCd’ 열을 사용합니다.
DataFrame 특정 열에 대한 기술 통계 계산
statistics = financeCompany['fssCorpUnqNo'].describe()
statistics
-------------------------------------------------------
count 1.066000e+03
mean 6.153951e+05
std 4.886180e+05
min 1.001970e+05
25% 1.614170e+05
50% 4.269355e+05
75% 1.053550e+06
max 1.701009e+06
Name: fssCorpUnqNo, dtype: float64
describe() 함수는 평균, 표준편차, 다섯 수치 요약 자료 등의 통계 정보를 제공합니다. 위의 코드는 ‘fssCorpUnqNo’ 열에 대한 기술통계값을 산출합니다.
여러 조건을 기반으로 DataFrame 행 필터링
filteredFinanceCompany = financeCompany[(financeCompany['isinCd'] > 1000) & (financeCompany['corpRegMrktDcd'] == 'P')]
이 코드는 부울 인덱싱을 사용하여 행을 필터링합니다. 대괄호 안에 조건을 지정하고, AND 논리에는 “&” 연산자를 사용하여 여러 조건을 결합합니다. 필터링된 결과 DataFrame을 filteredFinanceCompany에 저장합니다.
인덱스 리스트 기반으로 DataFrame에서 행 추출
indices = [1, 3, 5]
extractedRows = reshapedFinanceCompany.iloc[indices]
extractedRows
-----------------------------------------------------
corpRegMrktDcd A D E F G P Q
crno
1101110002975 NaN NaN 830.0 NaN NaN NaN NaN
1101110003204 NaN NaN NaN NaN NaN 88350.0 NaN
1101110003684 NaN NaN NaN NaN NaN 5300.0 NaN
이 코드는 pandas의 iloc 인덱서를 사용하여 지정한 인덱스를 기반으로 행을 추출합니다. iloc 인덱서를 사용하면 정수 위치로 행에 액세스할 수 있습니다. 따라서 extractedRows DataFrame에는 1행, 3행, 5행의 데이터가 저장됩니다.
DataFrame의 각 행에 함수 적용
def process_row(row):
row['P'] = row['P'] * 2
return row
newDf = reshapedFinanceCompany[['P']].apply(process_row, axis=1)
newDf
-------------------------------------------------------------------
corpRegMrktDcd P
crno
1101110002959 7040.0
1101110002975 NaN
1101110003155 28240.0
1101110003204 706800.0
1101110003444 NaN
... ...
2301110182384 NaN
2301110273456 NaN
2442350009895 NaN
2842110054933 NaN
2850110385985 NaN
apply() 메소드는 DataFrame의 각 행에 process_row 함수를 적용합니다. axis=1을 지정하면 각 열이 아닌 각 행에 함수를 적용합니다. 결과는 newDf DataFrame에 저장됩니다.
조건에 따라 DataFrame을 여러 개의 작은 DataFrame으로 분할
condition = financeCompany['isinCd'] > 1000
splitDataframes = []
grouped = financeCompany.groupby(condition)
for groupName, groupDf in grouped:
splitDataframes.append(groupDf)
이 코드는 ‘isinCd’ 열을 기반으로 조건을 생성한 다음 groupby 함수를 사용하여 DataFrame인 financeCompany을 더 작은 DataFrame으로 분할합니다. 각각의 DataFrame은 splitDataframes 리스트에 추가됩니다. 리스트에 저장했기 때문에 각각의 DataFrame에 개별적으로 접근(Ex. splitDataframes[0], splitDataframes[1] 등)하여 출력할 수 있습니다.
DataFrame의 두 열 사이의 상관관계 계산
column1 = 'isinCd'
column2 = 'fncoEmpeAvgSlryAmt'
correlation = financeCompany[column1].corr(financeCompany[column2])
print(f"'{column1}'와 '{column2}' 사이의 상관관계: {correlation}")
----------------------------------------------------------------------
'isinCd'와 'fncoEmpeAvgSlryAmt' 사이의 상관관계: 0.27915052425029635
이 코드는 corr 함수를 사용하여 DataFrame의 지정된 두 열 간의 상관 관계를 계산합니다.
DataFrame의 각 열에서 누락된 값의 비율 계산
missingPercentages = (financeCompany.isnull().sum() / len(financeCompany)) * 100
# Print the missing percentages
print("결측치 비율")
for column, percentage in missingPercentages.iteritems():
print(f"{column} : {percentage:.2f}%")
위 코드에서 isnull() 함수는 DataFrame인 financeCompany에서 누락된 값을 색인합니다. 그런 다음 sum() 함수를 사용하여 각 열의 누락된 값 수를 계산합니다. 누락된 값의 수를 DataFrame의 길이로 나누고 100을 곱하여 각 열의 누락된 값의 백분율을 얻습니다. 그런 다음 코드는 iteritems() 메서드를 사용하여 결과 Series 객체인 missingPercentages를 반복합니다. 각 열과 해당 누락 비율에 대해 print 문을 사용하여 출력합니다. :.2f 형식 지정자를 사용하여 소수점 이하 두 자리로 백분율을 표시하였습니다.
이번 포스팅에서는 Python Pandas 마스터하기 위한 세 번째 시간을 가졌습니다. 다음 포스팅도 기대해 주세요.
(Python Pandas 마스터하기 31 ~ 40 바로가기)
감사합니다!!