문자열 제어, 데이터프레임 재구성, 시계열 제어
시리즈와 인덱스에 대한 벡터화 문자열 함수이다.
무조건 str을 사용하고 문자열 메소드를 실행
str으로의 형변환 함수가 아니다!
대문자, 소문자화
pokemons['Name'].str.upper()
슬라이싱
pokemons['Name'][0:5]
하면 데이터 프레임의 슬라이싱이 일어남pokemons['Name'].str[0:5]
하면 각 데이터의 0:5까지만 읽어올 수 있다.[::-1]
을 통해 문자열 역정렬이 가능contains(pattern)
pkemons[’Name’].str.contains(’q’, case=True)
pokemons['Name'].str.contains('saur|ragon', case=False)
startswith(), endswith()
pkemons[’Name’].str.startswith(’Q’)
pkemons[’Name’].str.startswith((’Q’,'Pid'))
replace
pokemons['Type 1'].str.replace('Fire','Flame')
index, columns
pokemons.index.str[:5]
pokemons.columns = pokemons.columns.str.upper()
transpose()
league.transpose()
, league.T
로 트랜스포즈 가능stack()
unstack()
droplevel()
stack, unstack을 하며 생긴 불필요한 인덱스, 열을 삭제하는
구조를 바꿔 데이터를 보기 쉽게함
melt()
df.melt(id_vals='이름', value_vars=['국어', '영어', '수학'], var_name='과목', value_name='점수')
id_vals 열을 기준으로 value_vars 들을 정렬
pivot()
company.pivot(index='연도', columns='사원이름', values='연도별매출')
pivot_table()
company.pivot_table(values='연도별매출', columns='사원이름', aggfunc='sum')
company.pivot_table(values='연도별매출', columns='연도')
company.pivot_table(values='연도별매출', columns='소속팀', aggfunc='mean', index='연도')
.groupby()
df.groupby('과목')
→ DataFrameGroupBy 객체를 반환함 → 데이터프레임에서 이름을 표현할 수 없으므로group = df.groupby(’과목’)
하고 group.get_group(’과학’)
하면 과목 컬럼으로 ‘과학’을 갖는 데이터를 뽑아볼 수 있다.df.groupby(’과목’)[’성적’].mean()
하면 과목 별 성적 평균값을 얻을 수 있다.types_groups = df.groupby([’Type 1’, ‘Type 2’], dropna=False)
types_groups.max().loc[[’Dark’, ‘Ghost’]]
→ 인덱스를 통한 조회와 동일types_groups.max().loc[:, ’Dark’, :]
pokemons.groupby('Type 1').agg('Total': ['max','min','mean'])
과제
parents_group = df.groupby("부모 학업 성취")
analysis = parents_group.agg({'총점':['count','median','max','min','mean','std']})
analysis['총점'].sort_values('mean')
df[’Weeks’].dt.day
→ df[’Weeks’] 값들에서 일자를 가져올 수 있음df['Weeks'].dt.strftime('%Y년 %m월 %d일')
→ df[’Weeks’] 값을 원하는 포맷으로 출력 가능파일을 읽어오고 to_datetime()을 사용해도 되고, read_csv(’AAPL.csv’, usecols, index_col=’date’, parse_dates=[’date’])처럼 parse_dates 인자를 사용해 object를 date로 변환할 수 있다.
df.index.day_name(locale=’ko_KR.utf8’)
으로 각 데이터에서 요일을 한국어로 뽑아낼 수 있다.
stocks[’date’].dt.strftime(’%Y.%m.%d %H:%M:%S’)
stocks[’date’].dt.strftime(’%Y.%m.%d 시작 9:30’) → 포맷이 아닌 문자는 그대로 출력됨
pd.to_datetime(stocks[’date’], format=’%Y.%m.%d 시작 9:30’)
object가 ‘시작’과 시간을 제외하고 datetime으로 변경됨
조회
series.reindex(new_index)
stocks 데이터는 휴일을 포함하지 않음.
없는 날짜까지 포함해 전체를 인덱스로 설정하고싶다면?
min_date = stocks.index.min()
max_date = stocks.index.max()
new_index = pd.date_range(min_date, max_date, freq=’D’)
stock.reindex(new_index, fill_value='휴장') #-> 비파괴
stock.reindex(new_index).ffill() #-> forward fill을 사용해 nan을 이전 값으로 fill
ex 주간 평균으로 다운 샘플링
stock_years = stocks.resample(’Y’, kind='period') #-> groupby 때와 동일한 객체 상태
# kind로 period를 설정해 결과 인덱스를 기간 인덱스로 변환
stock_years.group #-> 경계선에 있는 데이터의 인덱스 위치
stock_years.agg(['mean','max','min'])
|
로 여러개의 문자 포함 여부를 한번에 확인할 수 있는걸 보고 혹시 &
로 and 조건으로도 쓸 수 있지 않을까 했는데 안된다!