*pandas version 확인
*pd.__version__ /// pd.show__version()
def coloring_text(val):
if val > 0:
color = '#1e3799'
else:
color = '#eb2f06'
return 'color: %s' % color
df[['순이익률']].style.applymap(coloring_text)
해당 부분 색바꿔줌
*df.applymap(lambda x: x**2) ==> 해당 함수 적용
pip install pandas
##pandas version 확인
*pd.__version__ /// pd.show__version() ==> python, pandas, numpy, matplotlib ... 버전확인가능
##create DataFrame
*pd.DataFrame({'행':['열']}
##설정할 값이 많을 경우 Numpy as np 씀
-pd.DataFrame(np.random.rand(행,열), columns='asgsdf' ==> columns index 부분 해당 문자로 변경)
##rename columns = 예)공백을 없애는 법/
1. df.rename({'col one': 'col_one'})
2. df.columns= ['col_one']
3. df.columns= df.columns.str.replace('', '_')
##모든 열 이름에 접두사 or 접미사
-df.add_prefix(X_) ==> 열 이름 앞에 X_ 붙음
-df.add_suffix('_Y') ==> 얄 이름 뒤에 _Y붙음
##reverse row order/ column
- df.loc[::-1] row 행 거꾸로
- df.loc[:, ::-1] row 모든 행과 column 거꾸로
but 이렇게 하면 인덱스 번호도 거꾸로 나옴
so, df.loc[::-1].reset_index(drop=True) 해줘야 됨
##select_columns
- df에서 int나 float만 가져오고 싶다면 ==> df.select_dtypes(include='number')
or 특정 부분을 제외하고싶다면 exclude='type'
##convert strings to numbers
- df.astype({'열': 변경할려는 'type'})
- if 해당 값이 없다면? ==> NaN으로 처리해줘야됨
df.to_numberic(df.해당열, errors='coerce') ==> 해당 열의 값에 error가 나면 NaN으로 변경해줌
df.to_numberic(df.해당열, errors='coerce').fillna(0)
if 전부 적용을 시킬거라면 to_numberic을 사용하여 apply를 적용시킴
df = df.apply(pd.to_numberic, errors='coerce').fillna(0) ==> 모든 type = float!!!
## DataFrame size 줄이기
- 먼저 df.info(memory_usage='deep') 확인 후 / memory_usage==> 데이터 크기
= 보고싶은 칼럼을 먼저 변수로 두고 cols= ['열', '열']/////usecols 사용함
파일 불러오기 == > url_csv = pd.read_csv('asdaosdk.csv', usecols=cols)
or dtypes = {'해당열':'category'} ==> 카테고리 데이터 유형은 메모리 사용량이 적은경우에만
==> url_csv = pd.read_csv('asdaosdk.csv', usecols=cols, dtype=dtypes)
##행단위로 여러 파일에서 DataFrame 빌드
- from glob import glob
예를 들어 data/stocks1.csv, data/stocks2.csv, data/stocks3.csv
*stock_files = sorted(glob('data/stocks*.csv')) 내장 정렬을 사용하여 concat 합치는 제너레이션함수
*pd.concat((pd.read_csv(file) for in stock_files))
==> index에 중복된 값이 생긴다?? == index가 마구잡이로 나옴
*pd.concat((pd.read_csv(file) for in stock_files), ignore_index=True)
## 두개파일의 열이 다르고 열을 나열하고싶다면 ==> 열을 연결해주는거임
*pd.concat((pd.read_csv(file) for in stock_files), axis='columns')
##pd.read_clipboard() 사용법 ==> excel 에서 그냥 복사하면됨
##DataFrame을 분할==> 왜?? 하나는 75프로/ 다른하나는 25프로 분할
movie_1 = movies.sample(frac=0.75, random_state=1234)
movie_2 = movie.drop(movies_1.index)
movies_1.index.sort_values()
##해당 열이 가지고 있는 특징을 가지고 추출( ㅣ = or, & = and, ~ = not)
ex) df.해당열.unique() == > array 리스트가 나옴
Groupby
- 주식 종목들의 평균 순이익률은 얼마일까
- 단, 순이익률이 -인 종목은 제외하고 계산
- 추가로 테마별로 // 칼럼에 있는 unique 고유값
In [30]:
df_subset.groupby('테마').순이익률.mean()
Out[30]:
테마
육계 9.255000
주류 3.303333
Name: 순이익률, dtype: float64
*****************isin 중요******
isin
순이익률 처럼 숫자형(numerical) 값을 기준으로 사용하는 것이 아닌,
범주형 (categorical) 데이터를 기준으로 conditioning을 하려는 경우는 어떻게 해야할까요??
1. df[(df.해당열 == 'unique값') ㅣ....)]
2. df[df.해당열.isin(['unique값', ....])]
3. df[~df.해당열.isin(['unique값', ....])] ==> 앞에 ~ 가 붙으면 이것을 제외하고 나옴
##가장 인기있는 종목을 찾는 방법
먼저 counts = df.해당열.value_counts() ==> 갯수가 가장 많은 것을 찾음
counts.nlargest(3) 가장 큰값 3개 추출// 필요한건 index뿐 = counts.nlargest(3).index
**해당열 목록처럼 취급 isin사용
df[df.해당열.isin(counts.nlargest(3).index)]
##결측값처리 NaN값의 수 == df.isna().sum() 사용 값을 1로 생각하고 더함
##누락된 값이 있는 열 삭제 df.dropna(axis='columns')
##dropna(tresh=len(df)*0.9, axis='columns')
*tresh
axis=1, thresh=N으로 설정하면 세로 방향(column)에 nan이 있다면 삭제시키되 다만 Nan이
아닌 값의 개수가 N개보다 적을 때 그 열을 삭제한다.
## split 사용
이름이 Jane Ann Smith 사이에 공백이 있다
df.[{'first', 'middle' ...}] = df.name.str.split(' ', expend=True)
하면 DataFrame에 first, middle.. 열이 추가되어 해당 이름 Jane / ann / Smith 나옴
##melt, pivot_table 자주 쓰임 중요해
## set_index() == drop=True default 값임 // 삭제 안할려면 False라고 써줘여함('인자'
## reset_index() ==
인자가 필요없음 drop= False default // 삭제 할려면 True ==> 기존인덱스 삭제
inplace= False default // 원본데이터에 대체한다면 True
pd.set_option('display.float_format', '{:.2f}'.format) // 모든 data 소수점 둘째자리까지
'통계, EDA, 선형대수 > Data Process & EDA' 카테고리의 다른 글
n114 기초미분 Basic Derivative (0) | 2021.05.15 |
---|---|
N111a EDA(Exploratory Data Analysis) (0) | 2021.05.09 |
N112a Feature Engineering / iloc (0) | 2021.05.09 |
댓글