Python Pandas 마스터하기 61~70

이번 포스팅은 Python pandas 마스터하기 위한 일곱 번째 포스팅입니다( python pandas 마스터하기 61~70 ).

이번 포스팅 내용을 학습하기 전에 이전 포스팅(Python pandas 마스터하기 1 ~10, Python pandas 마스터하기 11 ~20, Python pandas 마스터하기 21 ~30, Python pandas 마스터하기 31 ~40, Python pandas 마스터하기 41 ~50, Python pandas 마스터하기 51 ~60) 내용을 먼저 학습하시기 바랍니다.

간단한 예제 코드와 설명을 포함한 100가지 Python pandas 코드 중 No 61 ~ 70개에 대해서 살펴보겠습니다.

61. 데이터프레임에서 열의 첨도(kurtosis) 계산

import pandas as pd
from itertools import combinations

tempdata = {'이름': ['철수', '영희', '영남'],
            '나이': [45, 30, 55],
            '고향': ['서울', '부산', '인천'],
            '생년월일': ['19860511', '19990622', '20200823'],
           }

# 인덱스가 'one','two','three'인 finalData DataFrame 생성하기 
finalData = pd.DataFrame(tempdata, index = ['one','two','three'])


# 첨도(kurtosis) 계산
kurtosis = finalData['나이'].kurtosis()

# 첨도(kurtosis) 출력 
print("Kurtosis:", kurtosis)
----------------------------------------------
Kurtosis: nan

pandas의 kurtosis() 함수는 주어진 열의 첨도를 계산합니다. 첨도를 나타내는 단일 값을 반환합니다.

높은 양수 값은 이상치가 더 많고 꼬리가 두꺼운 분포를 나타내고, 음수 값은 이상치가 적고 꼬리가 가는 분포를 나타냅니다.
첨도 값이 0에 가까우면 비교적 정규 분포를 나타냅니다.


62. 데이터프레임의 두 열 사이의 교차표 계산

import pandas as pd

# 교차표 계산
crossTab = pd.crosstab(finalData['이름'], finalData['고향'])
crossTab
--------------------------------
고향	부산	서울	인천
이름			
영남	0	    0	    1
영희	1	    0	    0
철수	0	    1	    0

pandas의 crosstab() 함수는 두 개 이상의 factor에 대한 교차표를 계산합니다. 2개의 열을 인수로 사용하고, 2개의 열 사이의 고유한 조합 수 또는 빈도 분포를 보여주는 새 데이터프레임을 반환합니다.

Normalize, margins 및 aggfunc와 같은 crosstab() 함수의 추가 인수를 사용하여 교차 분석을 추가로 사용자 정의할 수 있습니다. 이러한 매개변수를 사용하는 방법에 대한 자세한 내용은 Pandas crosstab() 함수 이해하기 포스팅 글을 참고하시면 됩니다.


63. 데이터프레임을 SQLite 데이터베이스로 변환

import pandas as pd
import sqlite3

# df를 데이터프레임이라 간주하고, 'database_name' 은 SQLite 데이터베이스 이름이라 간주

# SQLite 데이터베이스 연결
conn = sqlite3.connect(database_name)

# 데이터프레임을 SQLite 테이블로 변환
df.to_sql('table_name', conn, if_exists='replace', index=False)

# 변경을 실행하고, 연결 해제
conn.commit()
conn.close()

위 코드에서는 먼저 sqlite3.connect() 함수를 사용하여 SQLite 데이터베이스에 대한 연결을 설정합니다. 그런 다음 데이터프레임의 to_sql() 메서드를 사용하여 데이터프레임을 SQLite 데이터베이스의 테이블로 변환합니다. if_exists=’replace’ 매개변수는 테이블이 이미 존재하는 경우 교체하도록 합니다.

기존 테이블에 데이터프레임을 추가하려면 ‘replace’ 대신 ‘append’를 사용할 수 있습니다. index=False 매개변수는 데이터프레임 인덱스가 데이터베이스 테이블에 별도의 열로 저장되지 않음을 나타냅니다.

마지막으로 변경 사항을 커밋하고 데이터베이스 연결을 닫습니다.


64. 인덱스 범위를 기반으로 데이터프레임 행 삭제

import pandas as pd

# 인덱스를 기반으로 한 열 삭제
finalData.drop(finalData.index[1:2 + 1], inplace=True)

# 원할경우, 인덱스 리셋
finalData.reset_index(drop = True, inplace = True)

# 변경된 데이터 프레임 출력
finalData
----------------------------------------------------------
	이름	나이	고향	생년월일
0	철수	45	    서울	19860511

위 코드에서는 데이터프레임의 index 속성과 함께 drop() 메서드를 사용하여 지정된 범위 내의 행을 삭제합니다. inplace=True 매개변수는 새로운 데이터프레임을 생성하는 것 없이 데이터프레임을 업데이트합니다. 변경 사항을 원본 데이터프레임에 직접 적용합니다.

행을 삭제한 후 원하는 경우 reset_index() 메서드를 사용하여 인덱스를 재 설정할 수 있습니다. drop=True 매개변수는 이전 인덱스 열을 삭제하는 데 사용하며 inplace = True는 변경 사항을 원본 데이터프레임에 직접 적용합니다.


65. 데이터프레임의 연속 행 사이의 백분율 변화 계산

import pandas as pd

tempdata = {'이름': ['철수', '영희', '영남'],
            '나이': [45, 30, 55],
            '고향': ['서울', '부산', '인천'],
            '생년월일': ['19860511', '19990622', '20200823'],
           }

# 인덱스가 'one','two','three'인 finalData DataFrame 생성하기 
finalData = pd.DataFrame(tempdata, index = ['one','two','three'])

# 백분율 변화 계산
percentageChange = finalData['나이'].pct_change() * 100

# 백분율 변화 출력
percentageChange
---------------------------------
one            NaN
two     -33.333333
three    83.333333
Name: 나이, dtype: float64

위 코드에서는 데이터프레임의 특정 열에 pct_change() 메서드를 사용하여 연속 행 간의 백분율 변화를 계산합니다. * 100은 소수 값을 백분율로 변환합니다.

percentageChange 변수는 지정된 열의 각 행에 대해 계산된 백분율 변화를 포함하는 새로운 Series 개체입니다.


66. 데이터프레임 열의 누적 발생 횟수 계산

import pandas as pd

tempdata = {'이름': ['철수', '영희', '영남'],
            '나이': [45, 30, 55],
            '고향': ['서울', '부산', '인천'],
            '생년월일': ['19860511', '19990622', '20200823'],
            '학년': [1, 2, 1]
           }

# 인덱스가 'one','two','three'인 finalData DataFrame 생성하기 
finalData = pd.DataFrame(tempdata, index = ['one','two','three'])

# 누적 발생 횟수 계산
cumulativeCount = finalData.groupby('학년').cumcount() + 1

# 누적 발생 횟수 출력
cumulativeCount
------------------------------------------------------------------------
one      1
two      1
three    2
dtype: int64

위 코드에서는 데이터프레임의 특정 열에 대해 groupby() 메서드를 사용하여 행을 발생 이벤트별로 그룹화 합니다. 그런 다음 cumcount() 메서드를 적용하여 각 그룹 내의 누적 개수를 계산합니다. + 1이 추가되어 0 대신 1부터 카운트를 시작합니다.

결과 cumulativeCount 변수는 지정된 열의 각 행에 대한 누적 발생 횟수를 포함하는 새로운 Series 개체입니다.


67. 데이터프레임의 열에 로그 변환 적용

import pandas as pd
import numpy as np

# 로그 변환 적용
finalData['로그변환_나이'] = np.log(finalData['나이'])

# 변환된 열을 가지는 데이터프레임 출력
finalData
-------------------------------------------------------------------
	    이름	나이	고향	생년월일	    학년	로그변환_나이
one	    철수	45	    서울	19860511	1	    3.806662
two	    영희	30	    부산	19990622	2	    3.401197
three	영남	55	    인천	20200823	1	    4.007333

위 코드에서는 numpy의 np.log() 함수를 사용하여 지정된 열에 로그 변환을 적용합니다. 그런 다음 변환된 값을 ‘로그변환_나이’라는 새 열에 할당합니다.

로그 변환은 음수가 아닌 값에만 적용할 수 있습니다. 열에 음수 값이나 0이 포함된 경우 해당 사례를 별도로 처리해야 할 수도 있습니다.


68. 여러 데이터프레임을 수직으로 연결

import pandas as pd

tempdata = {'이름': ['철수', '영희', '영남'],
            '나이': [45, 30, 55],
            '고향': ['서울', '부산', '인천'],
            '생년월일': ['19860511', '19990622', '20200823'],
            '학년': [1, 1, 2]
           }

# 인덱스가 'one','two','three'인 finalData DataFrame 생성하기 
finalData = pd.DataFrame(tempdata, index = ['one','two','three'])

tempdata1 = {'이름': ['영수', '진혁', '광현'],
            '나이': [64, 22, 14],
            '고향': ['대구', '울산', '전북'],
            '생년월일': ['19660413', '20000621', '20220805'],
            '학년': [3, 3, 1]
           }

# 인덱스가 'one','two','three'인 finalData1 DataFrame 생성하기 
finalData1 = pd.DataFrame(tempdata1, index = ['one','two','three'])

concatenatedDf = pd.concat([finalData, finalData1])

# 수직으로 결합된 데이터프레임 출력
concatenatedDf
---------------------------------------------------------------------------
	    이름	나이	고향	생년월일	    학년
one	    철수	45	    서울	19860511	1
two	    영희	30	    부산	19990622	1
three	영남	55	    인천	20200823	2
one	    영수	64	    대구	19660413	3
two	    진혁	22	    울산	20000621	3
three	광현	14	    전북	20220805	1

위 코드에서는 concat() 함수를 사용하고 데이터프레임 [finalData, finalData1] 리스트를 인수로 전달합니다. 이렇게 하면 데이터프레임 이 원래 열 구조를 유지하면서 하나씩 수직으로 쌓입니다.


69. 데이터프레임의 열에서 가장 큰 값을 갖는 상위 n개 행 추출

import pandas as pd

# 가장 큰 값을 가지는 상위 3개 행 추출
topNrows = concatenatedDf.nlargest(3, '나이')

# 가장 큰 값을 가지는 상위 3개 행 출력
topNrows
----------------------------------------------------
	    이름	나이	고향	생년월일	    학년
one	    영수	64	    대구	19660413	3
three	영남	55	    인천	20200823	2
one	    철수	45	    서울	19860511	1

위 코드에서는 데이터프레임의 nlargest() 메서드를 사용하여 지정된 열에서 가장 큰 값을 가진 상위 n개 행을 가져옵니다. nlargest() 메서드는 지정된 열의 값을 기반으로 상위 n개 행을 포함하는 새 데이터프레임을 반환합니다.

결과 topNrows 변수는 추출된 상위 n개 행을 포함하는 새로운 데이터프레임입니다.


70. 데이터프레임에 있는 열의 가중 평균 계산

import pandas as pd
import numpy as np

# 가중평균 계산 
weightedAvg = np.average(concatenatedDf['나이'], weights = concatenatedDf['학년'])

# 가중평균 출력
print("가중평균:", weightedAvg)
------------------------------------------------------------------------------------
가중평균: 41.54545454545455

위 코드에서는 numpy의 np.average() 함수를 사용하여 가중 평균을 계산합니다. 열 값 concatenatedDf[‘나이’]를 첫 번째 인수로 전달하고 해당 가중치 weights = concatenatedDf[‘학년’]을 가중치 매개변수로 전달합니다.

np.average() 함수가 올바르게 작동하려면 열 및 가중치 값이 숫자 또는 정수와 같은 데이터 유형이어야 합니다.

이번 포스팅에서는 Python Pandas 마스터하기 위한 일곱 번째 시간을 가졌습니다( python pandas 마스터하기 61~70 ).
다음 포스팅도 기대해 주세요.
(Python Pandas 마스터하기 71~80 바로가기)
감사합니다!!

답글 남기기

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