데이터 분석에 사용하는 패키지, 함수들
계속 추가예정
OS 관련
- os.listdir
디렉토리 리스트 가져오기
# 폴더 경로가 있는지 확인 후, 없으면 생성
if f'{dir_name}' in os.listdir(f'{base_path}'):
print('{dir_name} 폴더가 이미 존재합니다.')
else:
os.mkdir(f'{base_path}/{dir_name}')
# 파일 명의 일부를 사용하여 파일 경로 불러오기
dir_path = f'{base_path}/{dir_name}'
# file_name에 해당하는 파일이 한 개 있을 때
file_path = [x for x in os.listdir(f'{dir_path}') if file_name in x][0]
# file_name에 해당하는 파일이 여러개 있을 때
file_paths = [x for x in os.listdir(f'{dir_path}') if file_name in x]
- os.path.exists
경로가 있는지 확인
if not os.path.exists(dir_path):
os.makedirs(dir_path)
- except OSError
OS 관련 예외처리
try:
df.to_csv(f'{dir_path}/test.csv')
except OSError:
os.makedirs(f'{dir_path}')
df.to_csv(f'{dir_path}/test.csv')
DataFrame 관련
- describe
# using percentile
df = df.groupby('activity')['worktime'].describe(percentiles=[.25, .5, .75])
- groupby agg
# agg dict
dfg = df.groupby('activity').agg({'start_timestamp':'min', 'end_timestamp':'max'}).reset_index()
# agg list
dfg = df.groupby('case')['timestamp'].agg(['first', 'last'])
- string join
# join columns values as newline(\n)
description = df.agg('\n'.join, axis=1)
description.name = 'description'
df = pd.concat([df, pd.DataFrame(description).transpose()])
# get trace as activity
df_trace = df.groupby(['case'])['activity'].apply('>'.join).reset_index()
df_trace = df_trace.rename(columns={'activity':'trace'})
# multi columns to single column
df.columns = ['_'.join(col) for col in df.columns.values]
- pd.merge
df = pd.merge(df_i, df_s, on='activity', how='outer', suffixes=['_i', '_s'])
- add summary row
df_sum = df.sum()
df_sum.name = 'Sum'
df = pd.concat([df, pd.DataFrame(df_sum).transpose()])
- value_count
count value frequncy in column
value_count = df['category'].value_counts().reset_index()
value_count.columns = ['value', 'count']
- astype
col_types = {
"col1" : "str",
"col2" : "str",
"col3" : "number",
}
df = df.astype(col_types)
Time 관련
- datetime.now
date_info = datetime.now().date().strftime("%y%m%d")
- pd.to_datetime / parse_dates
# pd.to_datetime
df = pd.read_csv(f'{file_path}')
df['timestamp'] = pd.to_datetime(df['timestamp'])
# parse_dates
df = pd.read_csv(f'{file_path}', parse_dates=['timestamp'])
- pd.to_timedelta
number to timedelta
df['worktime'] = pd.to_timedelta(df['worktime'], unit='ms')
- np.datetime64
string to datetime
df = df.loc[df['date'] == np.datetime64('2023-11-02')].copy()
- np.timedelta64 / astype('timedelta[ms]')
timedelta to number
# divide np.timedelta64
df['worktime'] = (df['end_timestamp'] - df['start_timestamp']) / np.timedelta64(1, 'ms')
# astype
df['worktime'] = (df['end_timestamp'] - df['start_timestamp']).astype('timedelta64[ms]')
- dt.date / dt.time
split datetime
df['date'] = df['timestamp'].dt.date
df['time'] = df['timestamp'].dt.time
- datetime.time
lunch_start = datetime.time(12, 30, 00)
lunch_end = datetime.time(13, 30, 00)
cond_lunch = (df['time'].dt.time >= lunch_start) & (df['time'].dt.time < lunch_end)
df['is_lunch'] = np.where(cond_lunch, True, False)
'Python' 카테고리의 다른 글
Python BigQuery 사용하기 - 에러 해결방법 (1) | 2024.02.12 |
---|---|
Python BigQuery 연동하기 - 에러 해결방법 (0) | 2024.02.12 |
[Python] 리스트 컴프리헨션(list comprehension) (0) | 2021.10.12 |
Python으로 잔여백신 상태 확인하기 (5) | 2021.07.25 |
영화 리뷰 크롤링 (2) | 2021.06.19 |
댓글