zenn.skin 무료버전 배포중!
자세히보기

Python/Syntax

[Pandas] 함수 정리

koosco! 2023. 2. 9. 23:43

pandas 라이브러리에서 사용하는 함수 정리

 

1. 생성

import pandas as pd

# Dict를 입력값으로 받는 경우
# Key는 column이 된다
df = pd.DataFrame({'a': [4, 5, 6, 7],
                    'b': [8, 9, 10, 11],
                    'c': [12, 13, 14, 15]},
                    index=[1, 2, 3, 4])
                    
# List를 입력값으로 받는 경우
# 각 리스트는 row가 된다
df2 = pd.DataFrame(
            [[1, 2, 3, 4],
            [5, 6, 7, 8],
            [9, 10, 11, 12],
            [13, 14, 15, 16]],
            index=[1, 2, 3, 4],
            columns=list('abc'))

2. 이중 인덱스 데이터프레임

# index를 MultiIndex로 설정
# names는 각 index의 이름
df = pd.DataFrame(
            {'a': [4, 5, 6, 7],
            'b': [8, 9, 10, 11],
            'c': [12, 13, 14, 15],
            index=pd.MultiIndex.from_tuples(
            [('d', 1), ('d', 2), ('e', 1), ('e', 2)],
            names=['n', 'v']))

3. 정렬

df.sort_values('a', ascending=False) # 기준열, ascending: 정렬 순서
df.sort_index() # index를 기준으로 정렬

4. 열 이름 변경

df.rename(columns={'x': 'y'}) # x column의 이름을 y column으로 바꿈

5. index 초기화

df.reset_index()

6. 제거

df.drop(['a', 'b'], axis=1) # column 기준
df.drop([0, 1], axis=0) # row 기준

7. 출력

df.head(n) # 상위 n개 row 출력
df.tail(n) # 하위 n개 row 출력

# 조건식을 이용한 마스킹
df[df['a'] > 10] # a column의 값이 10보다 큰 row 출력
df[df['a'] == 10] # a column의 값이 10인 row 출력
df[df['a'].isin([1, 2, 3])] # a column의 값이 리스트 안에 있는 row 출력

8. 샘플링

df.sample(frac=0.25) # 0.25 비율만큼 표본 추출
df.sample(n=100) # 100개의 표본 추출

9. 특정 열에서 큰/작은 값 출력

df.nlargest(3, 'x') # x column에서 가장 큰 값 3개 출력
df.nsmallest(3, 'x') # x column에서 가장 작은 값 3개 출력

10. 인덱싱

df.iloc[1:3] # 1~2행 추출
df.iloc[1:] # 1행 이후부터 추출
df.iloc[:3] # 2행까지 추출
df.iloc[:, 1:3] # 1~2열의 모든 행 추출

df[['a', 'b']] # a, b열 추출

11. 행/열 추출

df.loc[:, 'a':'c'] # a~c열의 모든 행 추출
df.iloc[1:3, [0, 3]] # 0, 3열의 1~2 행 추출
df.loc[df['a'] > 5, ['a', 'c']] # a열 값이 5보다 크면 a열과 c열 추출

12. 데이터 프레임 크기, 값 확인

df['a'].value_counts() # 특정 열에 있는 값의 개수 세기
len(df) # DataFrame의 행 개수 세기

df.shape[0] # DataFrame의 행 개수 세기
df.shape[1] # DataFrame의 열 개수 세기

df.shape # DataFrame의 행/열 개수 세기

df['a'].nunique() # 특정 열이 포함하고 있는 값의 총 개수 세기
df['a'].unique() # 특정 열이 포함하고 있는 값들 출력

13. 중복된 값 제거

df.drop_duplicates(inplace=True)

14. 데이터 파악하기

df.count() # 각 열이 포함하고 있는 개수 확인

df.sum() # 각 열의 합
df.sum(axis=0) # 행의 합

df.median() # 각 열의 중간값
df.median(axis=0) # 행의 중간값

df.mean() # 각 열의 평균값
df.mean(axis=0) # 행의 평균값

df.quantile([0.25, 0.75]) # 각 열의 percentile 확인

df.min() # 각 열의 최솟값
df.min(axis=0) # 행에서의 최솟값

df.max() # 각 열의 최댓값
df.max(axis=0) # 행에서의 최댓값

df.std() # 각 열의 표준편차
df.std(axis=0) # 행의 표준편차

15. 데이터 프레임에 함수 적용

df.apply(np.sqrt) # 각 값들의 제곱근
df.apply(lambda x: x + 1) # 각 값에 1을 더함, lambda 함수 적용 가능

16. 결측치 처리

df.isnull() # null값인지 확인, True/False로 mask값을 반환함
pd.notnull(df) # null값이 아닌지 확인, True/False로 mask값을 반환함

df.dropna(inplace=True) # null값이 있는 행 삭제
df.fillna(0, inplace=True) # null값을 0으로 채움
df['a'].fillna(df['a'].mean()) # a열의 null값을 a열의 평균으로 채움

17. 열 생성

df['mean'] = (df['a'] + df['b'] + df['c']) / 3 # mean이라는 이름의 새로운 열 생성
df = df.assign(multiply=lambda df: df['a'] * df['b'] * df['c']) # 새로운 열 생성, 열 이름은 multiply가 된다

18. 행 생성

new_row = {'a': 8, 'b': 12, 'c': 16}
df.loc[len(df)] = new_row
df = df.append(new_row, ignore_index=True)

18. 기준 값 이하/이상의 값을 합치기

df['clip'] = df['a'].clip(lower=5, upper=6) # 5이하는 5로, 6이상은 6으로 통일

19. 행에 있는 값을 열로 이동

df.melt(df, id_vars=['A'], value_vars=['B']) # A열을 가져오고 B열의 값을 행으로 이동
df.melt(df, ['A', 'C'], ['B']) # A, C열을 가져오고 B열의 값을 행으로 이동
df.melt(df, ['A'], ['B', 'C']) # A열을 가져오고 B, C열의 값을 행으로 이동

20. 특정 열값을 기준으로 새로운 열 생성

df_melt = pd.melt(df, ['A'], ['B', 'C'])
df_pivot = df_melt.pivot(index='A', columns='variable', values='value')

# 원래 형태로 변환
df_origin = df_pivot.reset_index()
df_origin.columns.name = None

21. 시리즈 자료형 합치기

# s1: pd.Series, s2: pd.Series

pd.concat([s1, s2]) # 행으로 합치기
pd.concat([s1, s2], ignore_index=True) # 합치며 index 초기화
pd.concat([s1, s2], axis=1) # 열로 합치기

# df1: pd.DataFrame, df2: pd.DataFrame
pd.concat([df1, df2]) # 행으로 합치기, 값이 없다면 NaN으로 채워짐
pd.concat([df1, df2], join='inner') # 공통으로 갖는 값만 병합
pd.concat([df1, df2], axis=1) # 열로 합치기

pd.merge(df1, df2, how='left', on='x1') # x1을 key로 left join
pd.merge(df1, df2, how='right', on='x1') # x1을 key로 right join
pd.merge(df1, df2, how='inner', on='x1') # x1을 key로 inner join
pd.merge(df1, df2, how='outer', on='x1') # x1을 key로 outer join

22. 데이터 병합하기

adf = pd.DataFrame({'x1': list('ABC'),
                    'x2': [1, 2, 3]})
bdf = pd.DataFrame({'x1': list('ABD'),
                    'x2': list('TFT')})
cdf = pd.DataFrame({'x1': list('BCD'),
                    'x2': [2, 3, 4]})

pd.merge(adf, bdf, how='left', on='x1') # 좌측 데이터프레임을 기준으로 병함
pd.merge(adf, bdf, how='right', on='x2') # 우측 데이터프레임을 기준으로 병합
pd.merge(adf, bdf, how='inner', on='x1') # 두 데이터프레임의 공통값을 기준으로 병합
pd.merge(adf, bdf, how='outer', on='x1') # 두 데이터프레임의 모든값을 병합
pd.merge(adf, cdf) # 공통 값이 있는 값만 병합
pd.merge(adf, cdf, how='outer') # 모두 병합, 아래 방향으로

pd.merge(adf, cdf, how='outer', indicator=True) # 기준이 되는 데이터 프레임을 _merge 열로 출력

23. isin

adf[adf['x1'].isin(bdf['x1'])] # adf의 행중 bdf의 x1과 adf의 x1이 같은 값을 출력
adf[~adf['x1'].isin(bdf['x1'])] # adf의 행중 bdf의 x1과 adf의 x1이 같지 않은 값을 출력

 

24. 데이터 가공

df.shift(1) # 행 전체를 한 칸 아래 행으로 이동
df.shift(-1) # 행 전체를 한 칸 위 행으로 이동

df.cumsum() # 누적합 출력
df.cumprod() # 누적곱 출력

df.cummax() # 아래 행으로 이동하면서 새 행과 이전 행을 비교해 최댓값 출력
df.cummin() # 아래 행으로 이동하면서 새 행과 이전 행을 비교해 최솟값 출력

25. 그룹별 집계

df.groupby(by='<column name>').size() # 그룹별 데이터 수 표시
df.groupby(by='<column name>')['x'].mean() # 소그룹을 지어준 후 그룹 별 x값의 평균을 구함

df['x'].rank(pct=True) # 순위를 비율로 표시

 

 

 

'Python > Syntax' 카테고리의 다른 글

[Pytorch] 기초 문법  (0) 2023.03.26
[Numpy] hstack  (2) 2023.03.23
[Python] while ~ else문  (0) 2023.01.17
[Python] glob  (0) 2023.01.04
[Python] itertools (순열, 조합)  (0) 2022.12.21

'Python/Syntax'의 다른글

  • 현재글 [Pandas] 함수 정리

관련글