이번 포스팅은 Python pandas 마스터하기 위한 여섯 번째 포스팅입니다( python pandas 마스터하기 51~60 ). 이번 포스팅 내용을 학습하기 전에 이전 포스팅(Python pandas 마스터하기 1 ~10, Python pandas 마스터하기 11 ~20, Python pandas 마스터하기 21 ~30, Python pandas 마스터하기 31 ~40, Python pandas 마스터하기 41 ~50) 내용을 먼저 학습하시기 바랍니다. 간단한 예제 코드와 설명을 포함한 100가지 Python pandas 코드 중 No 51 ~ 60개에 대해서 살펴보겠습니다.
51. 데이터프레임에서 고유한 열 조합 추출
데이터프레임에서 고유한 열 조합을 추출하려면 itertools.combinations() 함수를 사용합니다.
import pandas as pd
from itertools import combinations
tempdata = {'이름': ['철수', '영희', '영남'],
'나이': [45, 35, 40],
'고향': ['서울', '부산', '인천'],
'생년월일': ['19860511', '19990622', '20200823'],
}
# 인덱스가 'one','two','three'인 finalData DataFrame 생성하기
finalData = pd.DataFrame(tempdata, index = ['one','two','three'])
def extract_unique_combinations(df):
columns = df.columns
combinationsList = []
for r in range(1, len(columns) + 1):
for combination in combinations(columns, r):
combinationsList.append(combination)
uniqueCombinations = list(set(combinationsList))
return uniqueCombinations
uniqueCombinations = extract_unique_combinations(finalData)
uniqueCombinations
------------------------------------------------------------------------
[('고향', '생년월일'),
('이름', '나이', '고향'),
('이름', '생년월일'),
('이름',),
('나이', '생년월일'),
('고향',),
('이름', '나이', '생년월일'),
('나이', '고향', '생년월일'),
('나이',),
('이름', '고향'),
('나이', '고향'),
('이름', '고향', '생년월일'),
('생년월일',),
('이름', '나이', '고향', '생년월일'),
('이름', '나이')]
데이터프레임 df를 인수로 사용하는 extract_unique_combinations() 함수를 정의합니다. df.columns를 사용하여 열 이름을 검색하고 1부터 데이터프레임의 열 수까지 가능한 조합 범위를 반복합니다. 각 조합 크기 r에 대해 itertools.combinations()를 사용하여 가능한 모든 열 조합을 생성합니다. 이러한 조합을 combinationsList에 추가합니다. 모든 조합을 생성한 후에는 combinationsList를 set(집합)으로 변환하여 중복된 조합을 제거한 다음 다시 리스트로 변환하여 조합의 순서를 유지합니다.
52. 데이터프레임의 열에서 히스토그램 만들기
데이터프레임의 열에서 히스토그램을 만들려면 Python의 matplotlib 라이브러리를 사용합니다.
import pandas as pd
import matplotlib.pyplot as plt
# 간단한 데이터프레임 생성
data = {'Values': [5, 10, 15, 20, 25, 25, 30, 35, 40, 45, 50]}
df = pd.DataFrame(data)
# 히스토그램 그리기
plt.hist(df['Values'], bins=5, edgecolor='black')
# 라벨과 제목 설정하기
plt.xlabel('값')
plt.ylabel('빈도')
plt.title('히스토그램')
# 히스토그램 출력
plt.show()
--------------------------------------------------------------------
plt.hist()를 사용하여 데이터프레임의 ‘Values’ 열을 데이터 소스로 지정하여 히스토그램을 그립니다. bins 매개변수는 히스토그램에 사용할 구간 또는 간격 수를 결정합니다.
53. DataFrame의 각 행에서 최대/최소값 계산
import pandas as pd
maxValues = finalData.max(axis=1) #use df.min(axis=1) for minimum
# 각 열에 대한 최대값 출력
print(maxValues)
-------------------------------------------------------------------
one 19860511
two 19990622
three 20200823
dtype: int64
max() 함수는 데이터프레임의 각 행의 최대값을 계산합니다. axis=1을 지정하면 행 전체의 최대값을 계산합니다. 각 열의 최대값을 계산하려면 axis=0을 사용하면 됩니다.
54. 데이터프레임 열을 리스트로 변환
import pandas as pd
columnList = finalData['나이'].tolist()
# 변환된 리스트 출력
print(columnList)
-----------------------------------------
[45, 35, 40]
tolist() 함수는 지정된 열을 리스트로 변환합니다. 결과 리스트를 변수 columnList에 저장합니다.
55. 데이터프레임의 열 최빈값 계산
import pandas as pd
# 'Value' 칼럼의 최빈값 계산
columnMode = df['Values'].mode()
# 최빈값 출력Display the mode
print("최빈값:", columnMode[0])
-------------------------------------
최빈값: 25
mode() 함수는 지정된 열의 최빈값을 계산합니다. 열의 최빈값을 포함하는 pandas의 시리즈(‘Series’)를 유형을 유지합니다. 최빈값이 하나 이상의 값을 가질 수 있습니다. 이 코드에서는 columnMode[0]를 사용하여 첫 번째 최빈값에 접근합니다.
56. 데이터프레임의 열에 롤링 윈도우 함수 적용
import pandas as pd
windowSize = 3
finalData['rollingMean'] = finalData['나이'].rolling(window = windowSize).mean()
# 업데이트된 데이터프레임 출력
print(finalData)
---------------------------------------------------------------------------------
이름 나이 고향 생년월일 rollingMean
one 철수 45 서울 19860511 NaN
two 영희 35 부산 19990622 NaN
three 영남 40 인천 20200823 40.0
rolling() 함수는 롤링 윈도우 객체를 생성합니다. window 매개변수를 사용하여 창 크기를 지정합니다. 이 예에서는 창 크기 3을 사용하여 평균을 계산합니다. 롤링 창 함수의 결과를 저장할 새 열에 대해 ‘rollingMean’을 원하는 이름으로 바꿀 수 있습니다.
57. 데이터프레임의 날짜/시간 열에서 연도, 월, 일 추출
import pandas as pd
finalData['생년월일'] = finalData['생년월일'].astype(str)
finalData['생년월일_날짜형식'] = pd.to_datetime(finalData['생년월일'])
# 년, 월, 일 추출
finalData['년'] = finalData['생년월일_날짜형식'].dt.year
finalData['월'] = finalData['생년월일_날짜형식'].dt.month
finalData['일'] = finalData['생년월일_날짜형식'].dt.day
finalData
---------------------------------------------------------------------------------------------
이름 나이 고향 생년월일 rollingMean 생년월일_날짜형식 년 월 일
one 철수 45 서울 19860511 NaN 1986-05-11 1986 5 11
two 영희 35 부산 19990622 NaN 1999-06-22 1999 6 22
three 영남 40 인천 20200823 40.0 2020-08-23 2020 8 23
pd.to_datetime() 함수를 사용하여 지정된 열이 날짜/시간 형식이 아닌 경우 날짜/시간 형식으로 변환합니다. ‘생년월일’ 컬럼은 숫자형 변수이므로 문자형 변수로 변환을 선행해야 합니다. 그런 다음 dt.year, dt.month 및 dt.day 접근자 함수를 사용하여 각각 연, 월, 일을 데이터프레임의 별도 열로 추출합니다.
58. 데이터프레임에 있는 열의 누적 최대값 계산
import pandas as pd
tempdata = {'이름': ['철수', '영희', '영남'],
'나이': [35, 45, 40],
'고향': ['서울', '부산', '인천'],
'생년월일': [19860511, 19990622, 20200823],
}
# 인덱스가 'one','two','three'인 finalData DataFrame 생성하기
finalData1 = pd.DataFrame(tempdata, index = ['one','two','three'])
finalData1
# 누적 최대값 계산
finalData1['나이_누적최대값'] = finalData1['나이'].cummax()
finalData1
------------------------------------------------------------------------
이름 나이 고향 생년월일 나이_누적최대값
one 철수 35 서울 19860511 35
two 영희 45 부산 19990622 45
three 영남 40 인천 20200823 45
데이터프레임의 지정된 열(‘나이’)에 cummax() 함수를 적용합니다. 각 행의 누적 최대값을 계산하고 그 결과를 ‘나이_누적최대값’이라는 새 열에 할당합니다.
59. 데이터프레임을 딕셔너리로 변환
import pandas as pd
finalDataDict = finalData.to_dict()
# 변환된 딕셔너리 출력
finalDataDict
-----------------------------------------------------------------------------
{'이름': {'one': '철수', 'two': '영희', 'three': '영남'},
'나이': {'one': 45, 'two': 35, 'three': 40},
'고향': {'one': '서울', 'two': '부산', 'three': '인천'},
'생년월일': {'one': '19860511', 'two': '19990622', 'three': '20200823'},
'rollingMean': {'one': nan, 'two': nan, 'three': 40.0},
'생년월일_날짜형식': {'one': Timestamp('1986-05-11 00:00:00'),
'two': Timestamp('1999-06-22 00:00:00'),
'three': Timestamp('2020-08-23 00:00:00')},
'년': {'one': 1986, 'two': 1999, 'three': 2020},
'월': {'one': 5, 'two': 6, 'three': 8},
'일': {'one': 11, 'two': 22, 'three': 23},
'나이_누적최대값': {'one': 45, 'two': 45, 'three': 45}}
to_dict() 함수는 데이터프레임 finalData를 딕셔너리로 변환합니다. 기본적으로 데이터프레임을 key가 열 이름이고, value가 행 인덱스를 나타내는 key와 해당 셀 값을 나타내는 value가 있는 딕셔너리로 변환합니다.
60. 데이터프레임에서 열의 왜도(skewness) 계산
import pandas as pd
# 왜도(skewness) 계산
skewness = finalData['나이'].skew()
# 왜도(skewness) 출력
print("Skewness:", skewness)
----------------------------------------
Skewness: 0.0
pandas의 skew() 함수는 주어진 열의 왜도를 계산합니다. 왜도를 나타내는 단일 값을 반환합니다. 양수 왜도 값은 오른쪽으로 치우친 분포를 나타내고, 음수 왜도 값은 왼쪽으로 치우친 분포를 나타냅니다. 왜도 값이 0에 가까우면 상대적으로 대칭적인 분포를 나타냅니다.
이번 포스팅에서는 Python Pandas 마스터하기 위한 여섯 번째 시간을 가졌습니다( python pandas 마스터하기 51~60 ).
다음 포스팅도 기대해 주세요.
(Python Pandas 마스터하기 61~70 바로가기)
감사합니다!!