Pandas 101
astype(type)
loc[[행], [열]]
- 라벨 값을 기반으로 행 데이터 읽기
e.g. ) data_frame.loc[data_frame[‘Invoice Number’].str.startswith(‘920-‘), :]
iloc[[행], [열]]
- 인덱스 값을 기반으로 단일 행을 선택해 열 헤더 행으로 사용할 수 있게 함
.ix[]
> loc
과 같으나 경고 메세지 반환
’:’ > 모든 행
.columns
- 열 출력
e.g.) data_frame.columns = data_frame.iloc[0]
.index
- 행 출력
.contains()
- 특정 문자열 포함 요소 탐색
e.g.) data_frame[‘Supplier Name’].str.contains(‘Z’))
.isin()
- 특정 값의 포함 여부를 확인 후 boolean 타입으로 반환
.startswith('')
- 특정 문자열로 시작되는 요소 탐색
.endswith('')
- 특정 문자열로 끝나는 요소 탐색
.reindex()
drop()
- 제거
read_csv(header = None, names = list_V)
concat(axis=0)
- 0 = 수평 / 1 = 수직으로 합침
merge()
>pandas.merge(DataFrame1, DataFrame2, on='key', how='inner')
Numpy >
numpy.concatenate([array1, array2], axis=1)
numpy.hstack((array1, array2))
numpy.c[array1, array2]
Data Frame
Series를 모아 만든 Data Table == 기본 2차원
각 열마다 고유의 데이터 타입을 가질 수 있음
구조적 데이터 구조에 대한 분석 > 가장 적합한 data object
각 row instance, tuple 마다 인덱스가 있고, 각 컬럼별로도 인덱스값이 있음
Nested Dict
1 |
|
Selection
df.name
- Seriesdf['name'][:3]
- column name with index numdf['name'][[0, 5, 10]]
- return values more than 1 indexdf[df['name' > 25]]
- return values more than 25 in dataframedf[:3]
- return 0, 1, 2 rows by rowdf[['col1', 'col2']][:2]
- return 2 rows only in col1, col2df[['col1', 'col2']].iloc[:10]
- return 0 to 10 rows only in col1, col2df.index = list(range(0, df.shape[0]))
- re indexing
Drop
df.drop(1)
- drop row that index num 1df.drop([0,1,3,6])
- drop rows after multiple indexdf.drop('col_name', axis=1)
# same asdel df['col_name']
Basic Operation in DataFrame
Series operation
numpy랑 비슷
index 기준으로 연산을 수행 > 겹치는 index 가 없는 경우 NaN 반환
넘파이는 사이즈가 같지 않으면 error / 시리즈는 에러는 없지만 리스트 인덱스를 기준으로 더해주면서 없을 경우 nan
df1.add(df2, fill_value=0)
- add df2 to df1
Series + DataFrame
data는 column 이름을 기준으로 broadcasting이 일어남
축을 변경해서 ( 세로 > 가로 ) 더해주면, s2의 index (원래 column) 값과 df의 index 값을 기준으로 broadcasting이 일어남
Lambda, Map, Apply
lambda 함수
한 줄로 함수를 표현하는 익명함수
lambda argument : expression
map 함수
함수와 sequence형 데이터를 인자로 받아 각 lmn 마다 입력받은 함수를 적용해 list 반환
일반적으로 함수를 lambda 형태로 표현
1 |
|
Map for Series
Pandas의 Series type 데이터에도 map 함수 사용 가능
function 대신 dict, sequence형 자료 등으로 대체 가능
1 |
|
Apply for dataframe
map과 달리 series 전체 - column 전체에 해당 함수 적용 - map 은 각 lmn마다 lambda를 적용시키는 경우라면
입력값이 series 데이터로 입력받아 handling 가능
각 컬럼별로 반환 - 통계 자료 뽑을 때 유용함
요약 정보를 보기 위한 data frame 형태로도 사용이 가능
1 |
|
Applymap for dataFrame
- Series 단위가 아닌 lmn 단위 전체에 함수를 적용
- Series 단위에 apply를 적용시킬 때와 같은 효과
- applymap, apply : DF 단위 내에서
- map : Series 단위 내에서
1 |
|
Built-in Functions
describe
Numeric type 데이터 요약 정보
Unique
Series data의 유일한 값을 list로 반환
데이터 라벨링-라벨인코더가 가능해짐
dict(enumerate(df['column_name'].unique()))
1 |
|
Sum
기본적인 column 또는 row 값 연산 지원 sub, mean, min, max, count, median, mad, var 등등
-
df.sum(axis=0)
# column sumsum by column name
-
df.sum(axis=1)
# row sum
isnull
값이 존재하지 않으면 null인 값의 합 ( 결측치 ) - 개수 등
column 또는 row 값의 NaN(null) 값의 index 반환
df.isnull().sum(0)
# sum의 파라미터 : 1 - 행 별로 0 - 열 별로
sort value
column 값을 기준으로 데이터 sorting
df.sort_values(['age', 'earn'],ascending=False)
# sort by age > earndf.sort_values(by='age', ascending = False)
cumsth
- cumsum
점점 증가함 : 1번째 줄 + 2번째 줄.. 2+3… 3+4… 증가해서 표현
주식이나 시간에 순서에 따른 거래량 표현 등을 할 때 유용히 사용 - cummax
Correlation & Covariance
상관계수와 공분산을 구하는 함수
corr, cov, corrwith
df.age.corr(df.earn)
나이와 소득간의 상관관계df.corrwith(df.earn)
소득과 연관관계가 많은 것df.corr()
전체 간의 상관관계df.age[df.age < 50].corr(df.earn)
55세 이하일 때 소득과 나이의 상관관계df.age[(df.age < 45) & (df.age > 25)].corr(df.earn)
나이 대가 증가함에 따라 소득도 증가함을 알 수 있음df.corrwith(df.earn)
특정 데이터만 볼 수 있음df.sex.value_counts(sort=False)
성별 별 데이터
Errors
-
modulenotfounderror no module named 'pandas'
가상환경을 열어서 pandas 설치하고 지웠다가 다시 설치하고 컴퓨터 재부팅하고 막… 오만가지 난리를 펼치다가… 터미널 창에서
which python3
입력해서 나오는 주소를 py 파일 라인 1에 붙여넣고 실행하니 오류 해결!#! /Users/park-eunbin/miniconda3/envs/IP/bin/python3
- b’Skipping line 13: expected 5 fields, saw 7\n’ ->
data_frame = pd.read_csv(input_file, error_bad_lines=False, warn_bad_lines=False)
로 해결 - pandas
.ix[]
Message
1 |
|
delimiter =','
오류 > 해결 못함… 왜? 왜 $1,600.60을 제대로 못걸러내냐