🔗Pandas_Cheat_Sheet - Irv Lustig
iloc & locloc은 label 값으로 접근, iloc은 index 기준으로 접근pd.dataframe.loc[] 은 슬라이싱 할때 start, end 모두 포함iloc 은 end 포함 안함groupbygroupby하면 더 이쁘게 볼 수 있다.df.groupby(['class', 'id'])[['score']].first()
💡위의 score에 해당하는 열을 선택하는 부분에서 리스트를 넘기면 데이터프레임을, 문자열을 넘기면 시리즈를 반환한다.
.astype() 메서드로 시리즈의 자료형을 변환할 수 있다.# astype 이용
df['date'].astype('datetime64[ns]')
# pandas 모듈 이용
pd.datetime(df['date'])
시리즈.자료형.메서드() 형태로 전체 열에 함수(메서드)를 적용할 수 있다.# 문자열 자료형 시리즈인 name 열에 대하여 각 요소의 길이 반환
df['name'].str.len()
# datetime 자료형 시리즈인 date 열에 대하여 각 요소의 연도 반환
df['date'].dt.year # datetime 자료형의 year attribute에 접근
# 요일명을 한국어로 반환
df['date'].dt.day_name('korean')
🔗[Pandas] Series.dt 사용하기 (날짜, 요일 등) - 시꾸러
meltdf3.melt(id_vars=['first', 'last']).groupby('variable')['value'].mean()
💡위의 코드예제처럼 melt된 경우 groupby로 통계량을 구하기 더 용이해진다.
pivotapplyimport numpy as np
import pandas as pd
# 1. 데이터프레임의 각 열 - df.apply(func)
col_sum = df.apply(np.sum()) # axis 기본값은 0 → 열 단위
# 2. 데이터프레임의 각 행 - df.apply(func, axis=1)
# 각 행의 최대값과 최소값의 차이(범위, range) 구하기
row_range = df.apply(lambda row: row.max() - row.min(), axis=1) # axis=1 → 행 단위
# 3. 시리즈의 각 요소 - series.apply(func)
s_squared = s.apply(lambda x: x**2)
# 4. 추가 인자와 함께 사용 (kwargs)
def add_constant(col, c=0)"
return col + c
# 모든 열에 특정 상수 더하기
df_plus_100 = df.apply(add_constant, c=100) # kwargs 방식으로 c 값을 넘겨 줌
💡apply를 사용자 정의 함수와 함께 사용할 경우 python 수준의 반복이 적용되기 때문에 느리다.
💡가능한 경우 C언어로 구현된 numpy 함수를 사용하여 속도의 이점을 가져가는 것이 좋다고 생각한다.
# 나이 열 구간화
np.select(
[
df['age'] < 10,
df['age'] < 20,
df['age'] < 40,
df['age'] >= 40
],
['kid', 'teenager', 'adult', 'senior'],
default=np.nan
)