파이썬 머신러닝 완벽 가이드[개정2판] pp.62-83 참고해서 내용 작성하였습니다.
공통 데이터 형식 | Numpy/Pandas 객체 | Pandas 이름 | 설명 |
---|---|---|---|
Boolean | np.bool | bool | 단일 바이트 |
Integer | np.int | int | 64비트 정수 |
Float | np.float | float | 64비트 소수 |
Complex | np.complex | complex | 복소수 |
Object | np.object | Object | 대게 문자열 |
Datetime | np.datetime64, pd.Timestamp | datetime64 | 나노초의 정밀도를 가진 시각 |
Timedelta | np.timedelta64, pd.Timedelta | datetime64 | 일부터 나노초 단위의 시간 간격 |
Categorical | np.Categorical | category | pandas에만 존재하는 범주형변수 |
예를 들어, '[]' 연산자 내 단일값 추출 / 불린 인덱싱 / 슬라이싱
- df[1:3]
tr_df[tr_df['Job']=='개발자'].head(5)
정리하면
- DataFrame 바로 뒤의 [] 연산자는 Numpy의 []와 쓰임이 다름.
- DataFrame 바로 뒤의 []연산자 내 입력값에는 칼럼 or 불린 인덱스 용도로만 사용 가능함.
tr_df.iloc[9,29]
iloc[]연산 유형 | 반환 값 |
---|---|
tr_df.iloc[:] | 전체 DataFrame 반환 |
tr_df.iloc[0:2, 1:4] | 슬라이싱 범위의 첫번째에서 두번째 행의 1:4 슬라이싱 범위의 두번째부터 네번째 열 범위에 해당하는 DataFrame 반환 |
tr_df.iloc[:,-1]
tr_df.loc['인덱스 값', '칼럼명']
loc[]연산 유형 | 반환 값 |
---|---|
tr_df.loc[:] | 모든 데이터 값 |
tr_df.loc['one':'five', 'Job':'개발자'] | 인덱스 값 one부터 five까지 행의 Job부터 개발자 컬럼까지의 DataFrame 반환 값 |
tr_df.loc[tr_df.salary >= 300] | loc[]는 인덱싱이 가능해서 salary 칼럼의 값이 300 이상인 모든 데이터를 불린 인덱싱으로 추출 |
1. iloc[]는 위치 기반 인덱싱이며 행과 열 위치 값을 지정해 원하는 데이터를 반환함
- 시작을 0부터 시작하여 좌표에만 의존하는 것
2. loc[]는 명칭 기반 인덱싱이며 행 위치에는 DataFrame 인덱스가 오고, 열 위치에는 Feature값들이 와서 원하는 데이터를 반환함.
- DataFrame의 인덱스 또는 칼럼명으로 접근 하는 것
- 슬라이싱을 '시작점':'종료점' 지정할 때 종료점이 -1이 아니라 종료점을 포함시킴.
3. 개별 또는 여러 값 전체를 추출한다고 하면 tr_df['job']와 같이 DataFrame['칼럼명]만으로 사용하는게 훨씬 좋음.
- 행, 열을 전체적으로 추출하려면 iloc[] or loc[]을 사용하는 것이 간편함.
tr_df[(tr_df['salary'] > 500) & (tr_df['address']=='서울 성북구')]
sort_values()
주요 파라미터는
by
ascending
inplace
tr_df_sorted = tr_df.sort_values(by=['salary, 'Job'], ascending=False)
method | 인수 | return |
---|---|---|
map | Series | Series |
apply | Series, DataFrame | Series, DataFrame |
applymap | DataFrame | DataFrame |
# 사용할 함수 정의
def fiveFunc(x):
return x*5
lambda x: x**2
에서 ':'로 입력 인자와 반환될 입력 인자의 계산식을 분리함.titanic_df['Child_Adult'] = titanic_df['Age].apply(lambda x: 'Child' if x <=15 else 'Adult')
titanic_df[['Age', 'Child_Adult']].head(8)
- 이때 주의할 점은 if식보다 반환 값을 먼저 기술해야 함.
-> lambda식 : 오른쪽에 반환 값이 있어야 하기 때문
- if,else만 지원하고 else if는 지원하지 않음.
라는 Feature를 생성해보면?
titanic_df['Age_cat]
= titanic_df['Age'].apply(lambda x: 'child' if x<=15 else (
'Adult' if x <= 60 else 'Elderly'))
titanic_df[/Age_cat].value_counts()
def get_category(age):
cat= ''
if age <=5: cat='baby'
elif age <=12: cat ='Child'
elif age <=18: cat = 'Teenager'
elif age <= 25: cat = 'Student'
elif age <= 35: cat = 'Ypimg Adult'
else: cat = 'Elderly'
return cat
# lambda 식에 위에서 생성한 함수를 반환값으로 지정함
titanic_df['Age_cat] = titanic_df['Age].apply(lambda x: get_category(x))
titanic_df[['Age', 'Age_cat']].head()
Split -> Apply Function -> Combine
groupby() - split
for k,v in abalone.iloc[:,:5].groupby(abalone['sex']):
print('key: ', k)
print('number: ', len(v))
print(v)
get_group()
abalone.iloc[:,:5].groupby('sex).get_group('M)
df.groupby('key')['column'].집계함수
abalone.groupby('sex')[['length','rings']].sum()
abalone.groupby('sex')[['height', 'diameter']].max()
df.groupby('key').filter(조건식함수)
🤜 Input
abalone['rings'].mean()
🖥️ Output
9.933684462532918
🤜 Input
def filter_mean(x):
return x['rings'].mean() > 9.933684462532918
🤜 Input
dabalone.groupby('sex').filter(filter_mean)
🖥️ Output
df.groupby('key')['column].agg(매핑함수)
df.gorupby('key')['column'].aggregate(매핑함수)
🤜 Input
abalone.groupby('sex')['whole_weight'].agg([('sex_총whole_weight', np.sum),
('sex_평균whole_weight', np.mean),
('sex_최소whole_weight', np.min),
('sex_최대whole_weight', np.max),
('sex_표준편차whoe_weight', np.std)])
🖥️ Output
df.groupby('key')['column'].apply(매핑함수)
🤜 Input
abalone.groupby('sex')[['rings']].apply(lambda x: x.rings.min())
🖥️ Output
🤜 Input
df.pivot_table(values='C',
index='A',
columns='B',
aggfunc='mean',
fill_value=None,
margins=False,
dropna=True,
margins_name='All')
🖥️ Output
- 두 column의 교차 빈도, 덧셈, 비율 등을 구할 때 사용됨.
🤜 Input
pd.crosstab(values=df['score'],
index=df['B'],
columns=df['C'],
aggfunc='mean')
🖥️ Output
사용이유 | |
---|---|
groupby | 특정 컬럼을 기준으로 그룹화하여 테이블에 존재하는 행들을 그룹별로 구분하기 위해 |
pivot_table | 다양한 요소들을 활용해 데이터를 빠르게 분석하기 위함 |
crosstab | 두 컬럼의 교차 빈도, 덧셈, 비율 등을 구할 때 사용 |
lambda x**4
:을 기준으로 오른쪽 값이 반환값이라는 것이다. If절에서도 먼저 반환 값이 나오고 그 다음에 if절이 시작된다는 점을 유의하자!groupy('key')['column'].agg(매핑함수)
였다. 이렇게 한번 정리를 하고나니 확실히 기억에 오래 남는거같다. 그리고 이제는 함수를 잘 만들어서 apply lambda에 적용함으로써 메모리 사용량도 신경쓰면서 하는 데이터분석가 되겠다! 오늘의 정리 끝!