Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- 국비지원
- 국비지원취업
- 프로그래머스 JS 코테
- js코테
- 프로젝트
- JS
- 코딩테스트
- 프론트엔드
- 미니 프로젝트
- pokeapi
- 개발블로그
- 자바스크립트 코딩테스트
- 개인프로젝트
- 프로그래머스
- 딥러닝
- 패캠부트캠프
- Java
- 깃허브
- 깃
- 영상처리
- FE
- 프론트엔드개발자
- 자바스크립트
- 패스트캠퍼스
- 부트캠프
- 프론트엔드부트캠프
- 패캠
- 패스트캠퍼스부트캠프
- 개발 프로젝트
- 프로그래머스코테
Archives
- Today
- Total
가쟤의 해변일기 🐳
[Pandas] 판다스 총정리 !!! 본문
패캠에서 받은 강의 안에 데이터 전처리/시각화/머신러닝 ... 있는 강의가 있어서 듣고 정리했다..!
총정리 해놓으면 나중에 까먹었을 때 여기 와서 보기 좋으니까 ..^-^
01. 데이터 프레임 생성 - 결측값(NaN)
b = {'company':['abc', '회사', '123'], '위치': ['Seoul', np.NaN, 'Busan']}
np.NaN
02. 칼럼명 추출 변경 - 컬럼명 변환
df3.rename(columns = {'company': '회사명'}, inplace=True)
03. copy를 이용한 데이터 복사
# 이렇게 복사 하면 같이 변경 O
df2 = df
# 이렇게 하면 같이 변경 X
import copy
df = pd.DataFrame({'a':[1,2,3], 'b':[4,5,6], 'c':[7,8,9]})
df2 = copy.deepcopy(df)
04. 시리즈
# 인덱스 변경
a = pd.Series([1,2,3], index = ['a','b','c'])
# 유일한 값 찾기
df = pd.DataFrame({'a':[1,2,3,1,2], 'b':[4,5,6,4,5], 'c':[7,8,9,7,8]})
a = df['a']
a.unique()
05. loc과 iloc을 이용한 원하는 위치의 데이터
### loc
# 세로
df['a', 'b'] # 이런 식의 시리즈 값을 뽑을 수 없음
df[['a', 'b']] # 이건 가능
# 가로
df[0] # 이런 식으로 뽑을 수 없음
df.loc[2:4] # loc로 행의 값을 뽑을 수 있음(슬라이스 가능)
# 인덱스가 문자로 이루어진 데이터 프레임
index = ['a', 'b', 'c', 'd', 'e']
df = pd.DataFrame({'a':[1,2,3,1,2], 'b':[4,5,6,4,5], 'c':[7,8,9,7,8]}, index = index)
df.loc['a':] # 인덱스 바꿨으면 인덱스값으로 이렇게 해야 함
# 열이 a, c이며 인덱스가 g, i인 데이터는
df.loc[['g', 'i'], ['a', 'c']] # 행 먼저, 그 다음 열
### iloc
# 처음부터 5번째까지의 데이터와 첫 번째 열 + 세 번째 열의 데이터 추출
df.iloc[:5, [0, 2]] # 인덱스가 영어일 경우에도 숫자로 이렇게 쓰면 댐
06. 조건에 맞는 데이터 추출
# a가 3이상인 데이터 중 a, c열만 출력
df[df['a']>=3][['a','c']]
# 연속 조건
df[(df['a']>=3) & (df['b'] < 16)] # '이거나'는 '|' <- 얘임
# 불리언 출력
a = (df['a']>=3) & (df['b'] < 16) # 시리즈임
07. 정렬
# 인덱스 번호 정렬임
df.sort_index(ascending=False) # 내림차순: False, 오름차순: True
df.reset_index() # 인덱스 초기화
df.reset_index(drop=True) # 기존의 인덱스값 필드 삭제
# 값 기준 정렬
df.sort_values(by=['a', 'b'], ascending=[True, False]) # 'a'열 오름차순, 'b'열 내림차순
08. 결측값 처리
# 결측 유무
df.isnull()
# 결측값 개수 확인
df.isnull().sum()
# 결측값이 포함된 행 지우기
df.dropna() # df.dropna(inplace=True)
# 결측값이 포함된 열 지우기
df.dropna(axis=1) # 열 기준으로 변경되며 열이 지워짐
# 결측값을 다른 값으로 대체하기
df.fillna(0) #inplace=True 가능
# 앞이나 뒤의 숫자로 바꾸기(추세를 따라가기 좋음)
## 뒤의 값으로 변경
df.fillna(method='bfill')
## 앞의 값으로 변경
df.fillna(method='ffill')
# limit 설정
df.fillna(method='ffill' limit=1) # 1번만 가져오겠다 NaN이 두 번 있어도 첫 번쨰만 채워짐
# 뒤의 값으로 대체 후 앞의 값으로 대체 하려면 순서대로 실행하면 댐
# 평균으로 대체
df.mean() # 전체 열의 평균 각각
df.mean()['a'] # 어떤 열의 평균인지 ['a']
df.fillna(df.mean()) # 이렇게 하면 좋음 각 열의 평균을 각 열의 결측값에 넣은거임
09. 타입 변환
df.dtypes # 데이터 타입 확인
df = df.astype({'판매량' : 'int'})
# 이상한 값(-)이 껴 있을 경우 pd.to_numeric(df['방문자수'])도 에러가 남
df['방문자수'] = pd.to_numeric(df['방문자수'], errors='coerce') # 재정의 필요(실수 변환)
# 판매일 - 날짜 데이터 형태로 변환
df['판매일'] = pd.to_datetime(df['판매일'].format="%m%d%y")
10. 레코드, 칼럼 추가 삭제
# 칼럼 추가(세로)
df['d'] = [1, 3, 5, 6, 8] # 같은 값일 경우 한 개
# a + b - c
df['f'] = df['a'] + df['b'] - df['c']
df.drop(['d','e','f'], exis=1) # 삭제
# 레코드 추가
df.append({'a':6, 'b':7,'c':8}, ignore_index=True)
df.loc[6] = [7, 8, 9]
# 레코드 삭제
df.drop(0) or df.drop([0, 1])
df.drop([i for i in range(4)])
df.drop(df.index[:4])
df.drop(df[df['a']<4].index)
df.drop(df[(df['a']<M3) & (df['c'] == 4)].index)
11. apply, map을 활용한 데이터 변환
# apply
# 어떤 조건에 만족할 때 그 값을 다른 값으로 변환
def case_function(x):
if x < 2:
return '2 미만'
elif x < 4:
return '4 미만'
else:
return '4 이상'
df['c'] = df['a'].apply(case)
# map
# 변수 하나를 만들어 놓고 어떤 값을 어떤 값으로 바꿀 것인지에 대한 정의
a = { 1 : 'one', 2: 'two', 3: 'three', 4: 'four', 5: 'five'}
df['c'] = df['a'].map(a)
12. 데이터 프레임 결합_상하결합
df1 = pd.DataFrame({'A': [1, 2, 3], 'B': [11, 12, 13], 'C': [21, 22, 23]})
df2 = pd.DataFrame({'A': [4, 5, 6], 'B': [14, 15, 16], 'C': [24, 25, 26]})
pd.concat([df1, df2]) # 이건 인덱스는 각각 붙여짐(012012임)
pd.concat([df1, df2], ignore_index=True) # 인덱스 0~5로 초기화
# 필드의 순서가 섞였을 때에도 괜찮음
# 서로 다른 필드로 구성되어 있는 데이터 프레임의 결합의 경우 빈공간에 NaN이 채워짐
# join='outer'가 기본값임
pd.concat([df1, df2], join='inner') # NaN이 생기는 필드 없앰
13. 데이터 프레임 결합_좌우결합
df1 = pd.DataFrame({'A': [1, 2, 3], 'B': [11, 12, 13], 'C': [21, 22, 23]})
df2 = pd.DataFrame({'A': [4, 5, 6], 'E': [14, 15, 16], 'F': [24, 25, 26]})
pd.concat([df1, df2], axis=1)
# left join, inner join, outer... 등이 있다.
# A를 기준으로 결합하고 싶다면
pd.merge(df1, df2, how='left', on='A')
# key값의 이름이 다를 경우
pd.merge(df1, df2, how='outer', left_on='USER_ID', right_on='ID')
728x90