Python Pandas 마스터하기 21 ~ 30

이번 포스팅은 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 바로가기)
감사합니다!!

답글 남기기

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