[데분스] Day+10(2). Python - Time_Series, Pivot, Merge, Concat, Statistics

용솝·2024년 3월 6일

Python

목록 보기
2/3
post-thumbnail

파이썬 데이터 핸들링 기본(2)

1. Time_Series : 시계열 데이터

# pd.to_datetime(컬럼) - 컬럼 타입을 datetime64(판다스 Timestamp)로 변경
df.Yr_Mo_Dy = pd.to_datetime(df.Yr_Mo_Dy) 

# dt.year - 연도만 추출(datetime 타입만 가능)
df.Yr_Mo_Dy.dt.year.unique()

# datetime.date() - 인자를 datetime.date 객체로 만들어줌
def fix_century(x):
    import datetime
    year = x.year - 100 if x.year >= 2061 else x.year
    return pd.to_datetime(datetime.date(year, x.month, x.day))

# 😵😵😵
# fillna(method='ffill') - nan 이면 이전값(forward)
# fillna(method='bfill') - nan 이면 이후값(back)
df.fillna(method='ffill').fillna(method='bfill')

# do.to_period('M') - yyyy-MM 형태로 인덱스
df.groupby(df.Yr_Mo_Dy.dt.to_period('M')).mean()

# rolling(7).mean() - 7일 간격 이동평균
df[['RPT','VAL']].rolling(7).mean()

# split(":") - ":"을 기준으로 문자 분리
# datetime.timedelta(days=1) - 시간간격이 1일
def change_date(x):
    import datetime
    hour = x.split(':')[1]
    date = x.split(":")[0]
    if hour =='24':
        hour ='00:00:00'
        FinalDate = pd.to_datetime(date +" "+hour) + datetime.timedelta(days=1)
    else:
        hour = hour +':00:00'
        FinalDate = pd.to_datetime(date +" "+hour)
    return FinalDate

# piviot() - 요일(행)별 PM등급(열) 값 
Ans1.pivot(index='dayName',columns='PM10등급',values='size').fillna(0)    

# diff() - 앞뒤 시간 차분. 값이 동일하면 연속임!
df['(년-월-일:시)'].diff().unique()

# set_index(컬럼명 ,inplace=True) - 컬럼명을 인덱스로 대체, 바로반영
df.set_index('(년-월-일:시)',inplace=True)

2. Pivot

# drop('인덱스 or 열이름', axis=0 or 1) - 행 or 열 삭제
df.drop('Indicator',axis=1,inplace=True)

# pivot(index='행', columns='열', values='데이터')
target.pivot(index='Location',columns='Period',values='First Tooltip')

# pivot_table(index='행', columns='열', values='데이터', afffunc='연산함수')
df.pivot_table(index='Dim1',columns='Period',values='First Tooltip',aggfunc='mean')

3. Merge, Concat

Concat은 SQL의 UNION, Merge는 SQL의 JOIN과 유사

# pd.concat([데이터프레임,데이터프레임], axis=0 or 1) - 데이터프레임을 행방향 or 열방향으로 합침
pd.concat([df1,df2], axis=0)

# pd.concat([데이터1,데이터2], join='inner') - 공통 열에 대해서만 합쳐줌
pd.concat([df3,df4],join='inner')

# pd.concat([데이터1,데이터2], join='outer') - full-outer join
pd.concat([df3,df4],join='outer').fillna(0)

# df.T.iloc[행,열] - 행열 전환해서 보여줌
df.T.iloc[:7,:3]

# pd.merge(데이터1,데이터2,on='조인키',how='조인방법') - 조인키를 조인방법대로 데이터 병합
pd.merge(df5,df6,on='Algeria',how='inner')

4. Statistics

# del df['컬럼명'] - 컬럼 삭제 (but, 원복안됨! 원본 복사해놓고 사용하기)
del df['Unnamed: 0']

# 가장 많이 등장한 이름
names[names.Count == names.Count.max()]

# median() - 중앙값
names[names.Count == names.Count.median()]

# std() - 표준편차
names.Count.std()

# describe() - 평균, 최소, 최대, 표준편차, 4분위수
names.describe()

profile
🖐

0개의 댓글