일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 이진탐색
- 백준
- Level2
- 부스트캠프_AITech3기
- 알고리즘_스터디
- 이코테
- 주간회고
- 정렬
- 단계별문제풀이
- 부스트캠프_AITech_3기
- U_stage
- 구현
- Level2_PStage
- 그리디
- 파이썬 3
- mrc
- 프로그래머스
- 다이나믹프로그래밍
- python3
- dp
- Level1
- 최단경로
- 그래프이론
- 기술면접
- 알고리즘스터디
- ODQA
- 다시보기
- dfs
- 개인회고
- 백트랙킹
- Today
- Total
국문과 유목민
Pandas 함수 정리 본문
Pandas 라이브러리 함수 중 자주 사용하는 함수들의 종류와 간단한 사용법을 다루는 포스팅입니다. 구체적인 내용을 더 알고싶다면 Pandas 공식 Document를 확인해주시기 바랍니다.
코드 설명 시 하단 코드에서 임의의 Pandas객체는 df_data로 가정하겠습니다. 추후 함수를 사용할 때는 해당 부분에 사용하고자 하는 변수를 대입해주시면 됩니다.
Pandas
인덱싱, 연산용함수, 전처리 함수 등을 제공하며, 데이터 처리 및 통계분석에 활용하는 라이브러리
- 기본적인 용어: DataTable, Attribute(column), Instance(row)
Data Loading
df_data = pd.read_csv(url, sep="정규식가능", header = column값 or None)
df_data.columns()
: 컬럼설정df_data.head()
: dataframe 데이터 중 위에서 데이터를 출력한다.
Pandas의 구성
Series
Series: 하나의 Column에 해당하는 데이터의 모음 Object. ndarray의 subclass이며, duplicate 가능하고, dict형의 데이터도 활용이 가능하다.pd.Seires()
: Series함수는 Wrapper함수의 성격을 갖고 있기 때문에, Index를 data에 대해 설정할 수 있다. astype(자료형)
: 자료형을 바꾸는 메소드 (numpy에서도 활용)
DataFrame
DataFrame: DataTable 전체를 포함하는 Object, Series를 모아서 DataTable을 만든다. 기본이 2차원. 보통 DataFrame()
을 직접 사용해서 데이터 프레임을 생성하는 경우는 많지 않고, csv파일을 불러서 사용하는 경우가 많다.
indexing
loc: (loc는 인덱스 이름)df.loc[1]
, df.loc[1, ['col1', 'col2']]
iloc: (iloc은 index number)df.iloc[1]
,df.iloc[:3, ['col1', 'col2']]
DataFrame Handling
df.bool = df.age > 40 # booleantype Series를 만들어서 df에 할당할 수 있다
df_data.Transpose() == df_data.T
df_data.values
df_data.index
df.to_csv() # csv형태로 만들어주고, 저장도 할 수 있다
del df_data['column'] # column을 삭제 (메모리 주소 자체를 삭제)
df.drop("col이름", axis=1)
# axis를 기준으로 자른다. (원본 영향 X) 데이터 프레임을 dict형태로 부를 수도 있다
Selection & Drop
df['컬럼명'].head(3)
or df['col1', ... , 'col9']
Tip) 데이터를 보는 다른 방법: df.head().T
# 컬럼 보기 수월
- DataFrame형태로 볼 때는 column을 리스트 형태로 넣어줘야 한다.
- column 이름 없이 사용하는 index number는 row 기준으로 표시힌다.
- dataframe에서도 boolean index & fancy index 사용이 가능하다.
Data Extraction & reindex(index 재설정)
df[['col1','col2']][:2] # Column과 index number
df.loc[[idx_ls]][[col_ls]]
df.iloc[:10, :3] # row, col 순서
df.index = list(range(11))
df.reset_index(drop=True, inplace=True)
# index 새로 생성, drop=True하면 기존 인덱스 삭제, replace 원본 값 변경
DataFrame Operation
Series Operation
index 기준으로 연산을 수행, 겹치는 index가 없을 경우 NaN값으로 반환한다.
DataFrame Operatio
DataFrame은 column과 index를 모두 고려 한다. add operation을 쓰면 NaN값에 해당하는 값의 대체 값을 fill_value라는 매개변수를 활용해서 넣어줄 수 있다.Series + DataFrame: axis를 기준으로 row broadcasting 실행
lambda, map, apply
map
map for Series: map함수를 Series 객체에도 사용 가능하다. map에 함수 대신 dict type을 넣어서 데이터를 교체할 수도 있다.
z = {1: 'A', 2: 'B',3: 'C'}
s1.map(z).head(5)
# Column에 해당하는 값을 중복없이 반환시켜준다
df.column명.unique()
# Target list를 conversion list에 해당하는 값으로 바꿔준다
df_data.replace(['value1', 'value2'], ['con_val1', 'con_val2'], inplace = True)`
apply
map과 달리, Series 전체에 해당 함수를 적용한다. 입력 값이 series 데이터로 입력받아 handling 가능하다. 각 칼럼별로 결과값을 반환한다. 내장 연산 함수(sum, mean, std...)를 사용할 때도 똑같은 효과를 거둘 수 있다. scalar 값 이외에 series도 반환 가능하다.
df_ino.sum() == df_info.apply(sum)
applymap
df_data.applymap
: seires 단위가 아닌 element 단위로 함수를 적용하며, 컬럼 단위로 통계치 뽑는데도 유용하다.
def f(x):
return Series([x.min(), x.max(), x.mean(), sum(x.isnul())],
index = ['min', 'max', 'mean', 'null'],)
df_data.applymap(f)
Pandas built-in Function
describe
: Numeric type 데이터의 요약정보를 보여준다. df.describe()
unique
: Series data의 유일한 값을 list로 반환 df.unique()
, 특정 값을 뽑아서 Label Encoding을 할 수 있다.
sum
,mean
,min
,max
,count
,median
,var
등, 해당 값들은 axis를 이용해서 axis(col = 0, row = 1) 기준으로 값을 구할 수 있다. 보통은 column기준으로 식을 구한다.sort_values(by='컬럼명', ascending=True)
: column값을 기준으로 데이터를 sorting해준다.ascending = True
파라미터로 오름, 내림차순 구분 가능. 여러가지 칼럼을 넣어서 여러 기준으로 정렬할 수 도 있다. sort_value를 하게 되면 인덱스가 섞이게 되다.
sort_values(by='컬럼명', ascending=True)
#Correlation & Covariance: 상관계수와 공분산을 구하는 함수
df_data.corr() # 모든 칼럼들 간의 상관관계
df_data.corrwith(col명) # col하나와 다른 모든 칼럼들 간의 상관관계
df_data.col1명.corr(col2명) # 두 칼럼 간의 상관관계
df_data.col1명.cov(col2명) # 두 칼럼 간의 공분산
df_data.column명.value_counts(sort=True)
# col에 해당하는 value의 값 계산. 뒤에 / len(df)추가해서 비율로 값 구하기도 가능
label encoding
- 필요한 Column 명만을 리스트 형태로 저장해서, 해당 리스트를 데이터 프레임에서 Fancy Index 처럼 사용한다.
#방법1: df_data의 Column에 해당하는 값을 숫자로 바꿔줌
key = df_data.column명.unique() # fancy index의 리스트
value = range(len(df.column명.unique()))
df["column명"].replace(to_replace=key, value=value)
#방법2: 카테고리 변수를 이항변수 (0, 1)로 바꾸기
df_data["sex_Code"] = df_data["sex"].replace({'male': 1, "female": 0})
기타 함수
df.isnull()
: NaN 값을 확인할 수 있다.pd.options.display.max_rows = 100
# dataframe 출력 시 보일 데이터 개수 정함
Group By 관련
SQL Groupby명렁어와 같다. split, apply, combine 과정을 거쳐서 연산을 하며, Series 타입을 반환한다.
df_data.groupby("묶음기준칼럼")['적용받는칼럼'].sum() # sum이외의 다른 연산 가능
multi_index데이터.unstack() 멀티 인덱스를 행, 열의 데이터로 풀어준다.
df_data.reset_index() # index 열 초기화
df_data.swaplevel() # multi index의 순서를 변경
df_data.sort_index(level=0~) # group by행렬 level 기준으로 정렬
df_data.sort_values() # group by행렬을 value기준으로 정렬
Grouped
- Groupby에 의해 split된 상태를 key, value 형태로 추출 가능하며, 이를 Grouped되었다고 한다. Grouped된 상태에서는 DataFrame 객체이다.
- Aggregation: group별로 연산을 해줌, 리스트로 여러 개의 연산을 할 수 있다
- Transformation: Aggregation과 달리 개별 데이터의 변환을 지정 이를 이용해서 groupby된 부분에만 특별한 연산을 적용할 수 있음
- Filteration: 특정 조건으로 데이터를 검색할 때 사용, filter 안에는 boolean 조건이 존재해야 한다.
grouped = df_data.groupby('칼럼')
for name, group in grouped:
print(name)
print(group)
# Aggregation
grouped.agg(sum)
# Transformation
score = lambda x: (x- x.mean()) / x.std()
grouped.transform(score)
# Filteration
df_data.groupby('컬럼').filter(lambda x: len(x) >= 3)
## 참고) len(x)는 grouped된 dataframe 개수
Case Study
날짜 데이터
dateutill모듈의 dateutil.pareser.parse
를 이용해서 숫자를 날짜 데이터로 만들 수 있다.
import dateutill
df_date["date"] = df_date["date"].apply(dateutil.pareser.parse, dayfirst=True)
# dayfirst=True, 가장 먼저 나오는 값
grouped.add_prefix('prefix문자열\_') # 열 앞에 접두사를 붙임
- Group by된 데이터를 .plot()
메소드를 통해 그래프를 그려볼 수 있다.
- 우리가 필요한 데이터를 count, unstack, plot함수를 이용해서 groupby된 값을 확인해볼 수 있다.
Pivot Table
Index 축은 groupby와 동일하다. Column에 라벨링 값을 추가해서 Value의 Numeric 값을 aggregation해주는 형태
df_movie.pivot_table(
values=['칼럼명1']
index=df_movie.critic,
columns=df_movie.title,
aggfunc='sum',
fill_value=0
)
Crosstab
두 칼럼의 교차 빈도, 비율, 덧셈 등을 구할 때 사용한다. groupby, PivotTable, Crosstab은 방법이 비슷하다.
Merge & Concat
Merge
- 두 개의 데이터를 특정한 칼럼을 기준으로 해서 하나로 합친다.pd.merge(left_df, right_df, on = '컬럼명')
- 왼쪽 데이터와 오른쪽 데이터 칼럼의 이름이 다른 경우, 각각 기준이 되는 칼럼을 적어둔다.pd.merge(left_df, right_df, left_on = 'left_컬럼명', right_on = 'right_컬럼명')
- Merge 시에는 총 4개의 Join이 존재한다. (inner(교집합), full(합집합), left(왼쪽 기준), right(오른쪽 기준)),
merge 시 how=""
파라미터를 통해 조절한다.
concat
같은 형태의 데이터를 붙이는 연산, 리스트 형태로 데이터 프레임을 넣는다.pd.concat([df1, df2], axis=0 or 1)
Persistance
- Database connection, Dataloading 시 db connection 기능, XlsxWriter 등을 제공
- 받아서 pickle데이터로 세이브할 수도 있다.
- 가능하다는 정도로만 알고 넘어가자
'IT 견문록 > 함수 및 코드 (디지털치매 대비)' 카테고리의 다른 글
Seaborn 멀티차트 사용법 (0) | 2022.02.06 |
---|---|
Seaborn API별 사용법 (0) | 2022.02.06 |
Pytorch Trouble Shooting (0) | 2022.01.26 |
[git]Git 기본 명령어 정리 (0) | 2022.01.21 |
Numpy 함수 정리 (0) | 2022.01.21 |