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