본문 바로가기

Python

데이터 조작 및 분석을 위한 Pandas 심화

데이터프레임 정렬하기

  • 인덱스, 컬럼값으로 정렬할 수 있음.

Index, Column 기준으로 정렬하기

axis = 0 : 행 인덱스 기준 정렬(Default 오름차순)
ascending = False : 오름차순 / Tru : 내림차순

import numpy as np
import pandas as pd

print("DataFrame: ")
df = pd.DataFrame({
    'col1' : [2, 1, 9, 8, 7, 4],
    'col2' : ['A', 'A', 'B', np.nan, 'D', 'C'],
    'col3': [0, 1, 9, 4, 2, 3],
})
print(df, "\n")

# 인덱스 기준으로 내림차순 정렬
df.sort_index(axis = 1, ascending  = False)

# col1 컬럼기준 정렬 오름차순 (Default 오름차순)
df.sort_values('col1', ascending = True) 

# col2 컬럼기준 오름차순 정렬 후 col1 컬럼기준 내림차순 정렬
df.sort_values(['col2', 'col1'], ascending = [True, False])

데이터프레임 분석용 함수

집계함수 - Count, max, min, sum, mean

  • count메서드 활용하여 데이터 개수 확인 가능. (Defalut : NaN값 제외)

data = {
    'korean' : [50, 60, 70],
    'math' : [10, np.nan, 40]
}

df = pd.DataFame(data, index = ['a', 'b', 'c']
# 열 카운트
df.count(axios = 0)
# 행 카운트
df.count(axis = 1)
# 최대값 (Default axios = 0  열기준, NaN값 제외)
df.max()
# 최소값
df.min()
# 합계
df.sum()
# 평균
df.mean()
# 합계 행기준
df.sum(axis = 1)
# 평균 행기준, NaN 값 포함시
df.mean(axis = 1, sipna = False)

# Nan값이 존재할 때 해당 열 평균값을 구하여 NaN값을 대체 할 경우
B_avg = df['math'].mean()
print(B_avg)

# NaN값 대체
df['math'] = df['math'].fillna(B_avg)
# 평균
df.mean(axis = 1, skipna = False)

그룹으로 묶기

  • 간단한 집계를 넘어서서 조건부로 집계하고 싶은 경우
  • groupby. SQL 과 유사함.
  • aggregate. groupby를 통해서 집계를 한번에 계산하는 방법.
  • filter. groupby를 통해서 그룹 속성을 기준으로 데이터 필터링.
  • apply, lambda. 적용 가능.
  • groupby로 묶인 데이터에서 key값으로 데이터를 가져올 수 있다.

import numpy as np
import pandas as pd

df = pd.DataFrame({
    'key': ['A', 'B', 'C', 'A', 'B', 'C'],
    'data1': [1, 2, 3, 1, 2, 3],
    'data2': [4, 4, 6, 0, 6, 1]
})
print("DataFrame:")
print(df, "\n")

# data2 컬럼의 평균이 3보다 큰 것만 필터링.
def filter_by_mean(x):
    return x['data2'].mean() > 3

# 집계함수 min, numpy의 median, pandas의 집계함수 max
# 표현방식이 아래와 같이 다양함.
df.groupby('key').aggregate(['min', np.median, max])
df.groupby('key').aggregate({'data1' : 'min', 'data2': np.sum})

df.groupby('key').mean()
df.groupby('key').filter(filter_by_mean)

df.groupby('key').apply(lamda x: x.max() - x.min())

df = pd.read_csv("./univ.csv")
# 상위 5개 데이터
df.head()
# 데이터 추출
df.groupby("시도").get_group("충남")
len(df.groupby("시도").get_group("충남"))  # 94

'Python' 카테고리의 다른 글

Python의 모듈과 패키지  (0) 2021.09.21
Python-자료형 활용  (0) 2021.09.21
Python의 기본내용  (0) 2021.09.16
Windows 에서 PIP 설치하기  (0) 2021.09.15