[Python] 자주 쓰는 메소드 정리 - 판다스, 날짜, 함수, 인덱싱

데이터 전처리, 피쳐 엔지니어링 시에 자주 사용하는 메소드를 정리합니다.

날짜 요소 추출하기

train['일자'] = pd.to_datetime(train['일자'])     # 날짜형변환
train['년'] = train['일자'].dt.strftime('%Y')     # 년
train['월'] = train['일자'].dt.strftime('%m')     # 월
train['요일'] =train['일자'].dt.dayofweek         # 요일
train['일'] = train['일자'].dt.day                # 일
train['주'] = train['일자'].dt.weekofyear         # 주

공휴일 날짜 리스트 추출 / DATETIME 형변환 / 날짜 계산

from pytimekr import pytimekr
from datetime import timedelta, datetime

# 연도별 추석 날짜 구하기
holiday = []
for i in range(2016, 2022):
    holiday.append(pytimekr.hangul(i).strftime("%Y-%m-%d"))
    holiday.append(pytimekr.children(i).strftime("%Y-%m-%d"))
    holiday.append(pytimekr.independence(i).strftime("%Y-%m-%d"))
    holiday.append(pytimekr.memorial(i).strftime("%Y-%m-%d"))
    holiday.append(pytimekr.buddha(i).strftime("%Y-%m-%d"))
    holiday.append(pytimekr.samiljeol(i).strftime("%Y-%m-%d"))
    holiday.append(pytimekr.chuseok(i).strftime("%Y-%m-%d"))
    holiday.append(pytimekr.lunar_newyear(i).strftime("%Y-%m-%d"))

# holiday 리스트 str > datetime 형으로 변환    
holiday = pd.to_datetime(holiday, format="%Y-%m-%d")

# holiday 앞뒤 날짜
holiday_next = holiday + timedelta(1)

특정 컬럼 형변환

train = train.astype({'month':'int','week':'int', 'weekofday':'int', 'day':'int', 'year':'int'})

컬럼명 변경

# 새로운 컬럼명
en_colnames = ['date','weekofday','total','off','btrip','day','week']
# 새로운 컬럼명으로 변경
train.columns = en_colnames

Null값 대치

train.fillna( method='pad',         # 주변값으로 대치
              inplace=True)

특정 조건 함수 생성 / 데이터프레임 적용

# 함수 생성
def avg_ln(weekofday):
    if weekofday == 0: avg_weekofday = 1146
    elif weekofday == 1: avg_weekofday =  926
    elif weekofday == 2: avg_weekofday = 905
    elif weekofday == 3: avg_weekofday = 824
    else : avg_weekofday = 654      
    return avg_weekofday

# 함수 적용 > 새 컬럼 생성
train['avg_weekofday_ln'] = train['weekofday'].apply(lambda x : avg_ln(x))

튜플 데이터로 구성된 리스트 인덱싱


# dataset 형태
# humanreadable date : machine readable date 가 튜플 형태로 맵핑되어있음
[('9 may 1998', '1998-05-09'),
 ('10.11.19', '2019-11-10'),
 ('9/10/70', '1970-09-10'),
 ('saturday april 28 1990', '1990-04-28'),
 ('thursday january 26 1995', '1995-01-26'),
...]


# 튜플의 첫번째 요소들만 추출해 리스트를 만든다.
human_readable = []
for i in range(len(dataset)):
    human_readable.append(dataset[i][0])

human_readable

리스트 내 최댓값 찾기

hr_length =[]
for i in range(len(human_readable)) :
    hr_length.append(len(human_readable[i]))

# 단순히 리스트에 max함수 사용
print(max(hr_length))