Pandas : Python에서 데이터를 조작하고 쉽게 분석할 수 있게 도와주는 라이브러리
1. 데이터 불러오기/ 저장하기
1-1. 데이터 불러오기
# 불러올 때, index_col =0 을 하면 인덱스가 컬럼으로 불러와지지 않는다.
df = pd.read_csv("tips_data.csv", index_col=0)
1-2. 데이터 저장하기
# 인덱스 따로 지정해주지 않으면, 인덱스가 컬럼으로 들어갈 수가 있음.
data.to_csv("tips_data.csv",index=False)
csv말고도 json, html, excel 등 여러 형태가 가능하다.
2. 데이터 내용 확인하기
2-1. 데이터 구성 값 확인
1) .columns : 컬럼명 확인
df.columns
2) .index : 인덱스명 확인
df.index
3) .values : 행별로 값을 array로 묶어 반환해준다
df.values
4) .dtypes : 칼럼들의 데이터타입 확인 가능
df.dtypes
5) .shape : 데이터프레임의 (행,열) 크기 확인
df.shape
2-2. 데이터 내용 확인
1) head() : 데이터의 상단 5개 행 출력
df.head(10)
2) tail() : 데이터의 하단 5개 행 출력
df.tail(2)
3) info() : 데이터에 대한 전반적인 정보 제공
df.info()
4) describe() : 데이터의 칼럼별 기초통계량 확인
- include를 설정하면 문자형도 출력 가능
# 기초통계량 확인 가능 (기본적으로 숫자 타입만 실행)
df.describe()
# include를 설정하면 문자형도 출력 가능
df.describe(include='all')
5) value_counts() : 컬럼에 있는 고유한 값들의 개수를 반환
- normalize를 사용하면 개수가 아니라 비율을 알려준다.
# 컬럼에 있는 고유한 값들의 개수를 반환
df['tip'].value_counts()
# normalize를 사용하면 개수가 아니라 비율을 알려준다.
df['tip'].value_counts(normalize=True)
6) unique() : 해당 컬럼의 고유한 값들을 반환
df['day'].unique()
2-3. 결측치
1) isna() : 결측치 확인
- notna() : 결측치가 아니면 True 반환
# null이면 True 반환
df.isna()
# B 컬럼에서만 확인
df['B'].isna()
2) fillna() : 결측치를 특정 값으로 대체
df['Age'].fillna(29)
3) dropna() : 결측치를 삭제
# axis=0 : 행 제거 (=dropna())
# axis=1 : 열(컬럼) 제거
# inplace : 원본을 변경할지의 여부
df.dropna()
3. 데이터타입
3-1. 특정 컬럼의 데이터타입 확인
df['total_bill'].dtype
3-2. astype() : 컬럼의 데이터 타입 바꾸기
df['total_bill'].astype(str)
3-3. pd.to_datetime() : datetime으로 데이터 타입 바꾸기
pd.to_datetime(df['created_at'])
4. 인덱스
4-1. 인덱스 이름 지정하기
1) 처음 만들때 지정해주기
df = pd.DataFrame({
'A':[1,2,3],
'B':['a','b','c']},
index=['idx3','idx2','idx1']
)
2) 기존 인덱스 이름을 변경하기
- 데이터 프레임 자체가 변경
df.index = ['ㄱ','ㄴ','ㄷ']
4-2. 특정 인덱스의 값만 불러오기
df.loc['idx2']
4-3. sort_index() : 인덱스 기준으로 정렬하기
df.sort_index()
4-4. set_index() : 칼럼을 인덱스로 지정
df.set_index('B')
4-5. reset_index() : 인덱스를 기본값으로 변경
- drop=True 안하면 기존의 인덱스가 칼럼으로 넘어간다.
# 인덱스를 기본값으로(정수) 변경
# drop=True 안하면 기존의 인덱스가 칼럼으로 넘어간다.
df.reset_index(drop=True)
5. 컬럼
5-1. 원하는 컬럼 가져오기
# 열 1개 가져오기 (Series 형태)
df['name']
# 열 2개 이상 가져오기 (Dataframe 형태)
df[['name', 'age']]
5-2. 컬럼 이름 변경하기
df.columns = ['이름','나이','성별']
5-3. rename(columns = { '기존' : '변경' }) : 특정 컬럼 이름만 변경하기
df.rename(columns={'이름':'name'})
5-3. 컬럼 추가하기
df['스포츠']='축구'
5-4. 컬럼 삭제하기
del df['스포츠']
6. 데이터 선택
6-1. iloc : 번호로 선택하기
1) 행 가져오기
# 0번째 행 선택
df.iloc[0]
# 슬라이싱으로 행 가져오기
df.iloc[0:2]
# 간격 지정해서 행 가져오기
df.iloc[::2]
2) 행과 열 가져오기
# 행과 열 가져오기
df.iloc[0, 1]
# 슬라이싱으로 범위 지정해서 가져오기
df.iloc[0, 0:2]
df.iloc[:,0]
6-2. loc : 이름으로 선택하기
1) 행 가져오기
# loc로 특정 행 가져오기
df.loc['e']
# 슬라이싱으로 범위와 간격 지정해서 가져오기
df.loc['b'::2]
2) 행과 열 가져오기
df.loc['b':,'A']
df.loc['b':'d','A':'C']
# 원하는 행만 지정해서 가져오기 (슬라이싱x)
df.loc['a':'c',['C','B']]
df.loc[['e','a'],['C','B']]
7. 불리언 인덱싱
- 조건이 True인 값만 반환
# 성별이 남자이면서 담배를 피는 사람만 가져오기 (and 를 &로 사용!)
df[(df['sex']=='Male') & (df['smoker']=='Yes')].head(10)
# or 대신에 | 사용
df[(df['sex']=='Male') | (df['smoker']=='Yes')]
7-1) isin()
: 특정 값을 포함하는지 확인
# size 값이 2나 3이면 True를 반환
df['size'].isin([2,3])
# day가 Sun이거나 Thur인 행만 선택
df[df['day'].isin(['Sun','Thur'])]
8. 데이터 병합
8-1. concat()
: 데이터 프레임을 수직 or 수평 결합
- 병합할 때, 배열의 크기가 맞지 않으면 값이 없는 부분에는 NaN이 생성된다.
- axis = 0 : 수직
- axis = 1 : 수평
# 인덱스가 유지된 채 병합
pd.concat([df1,df2,df3])
# 인덱스를 새롭게 정렬
pd.concat([df1,df2,df3]).reset_index(drop=True)
# axis로 수직(0), 수평(1) 병합 가능
print(pd.concat([df1,df2,df3], axis=0).reset_index(drop=True))
8-2. merge()
: 특정 컬럼을 고려해서 데이터를 병합 (sql에서 join과 동일)
- 기준 컬럼을 공통으로하면서 수평으로 결합
# on: 병합하고자 하는 기준이 되는 컬럼
pd.merge(df1,df2,on='key')
# how 는 join 방법을 뜻함 -> inner join이 디폴트
# inner, outer, left, right 존재
pd.merge(df1,df2,on='key',how='inner')
9. 데이터 집계
9-1. group by()
: 특정 열을 기준으로 데이터를 집계한다.
# Category를 기준으로 묶는다. (index로 들어감)
# DataFrameGroupBy object 생성됨
df.groupby('Category')
#여러 메소드 사용
df.groupby('Category')['A'].mean()
df.groupby('Category')[['A','B']].sum()
df.groupby('Category')['C'].count()
9-2. agg()
: 여러 개의 칼럼에 다양한 함수를 적용
- 모든 열에 여러 함수를 매핑 : agg[함수1, 함수2, 함수3]
- 각 열마다 다른 함수를 매핑 : agg[{열1:함수1, 열2:함수2,,,,}]
# 모든 열에 여러 함수를 매핑 : .agg[함수1, 함수2, 함수3]
# 각 열마다 다른 함수를 매핑 : .agg[{열1:함수1, 열2:함수2,,,,}]
df.groupby('Category').agg(list)
df.groupby('Category').agg([list,sum]) #list와 sum 2개의 열을 반환
9-3. pivot table
- index : 행별로 묶을 기준
- columns : 열별로 묶을 기준
- values : 테이블 안에 들어갈 데이터
- aggfunc : 적용할 함수
# 피벗 테이블 만들기
pivot = df.pivot_table(index='Date', columns='Category', values='Value', aggfunc='sum')
# pivot table의 column을 여러개의 기준으로 정렬하기
pivot = df.pivot_table(index='Date', columns=['Category','SubCategory'],
values='Value', aggfunc='sum')
10. 데이터 정렬하기
10-1. sort_values() : 값을 기준으로 정렬
# by 칼럼의 값을 기준으로 정렬한다
# ascending으로 오름차순, 내림차순 정렬
df.sort_values(by='Age', ascending=False)
# 여러개를 기준으로 정렬 가능
# 먼저 나온 걸 정렬하고, 같은 값이면 두번째 기준으로 정렬
df.sort_values(by=['Age','Score'], ascending=[True,False])
10-2. sort_index() : 인덱스를 기준으로 정렬
# 인덱스를 기준으로 정렬
df.sort_index(ascending=False)
'파이썬' 카테고리의 다른 글
[Python] 이터러블(iterable) vs 이터레이터(iterator) (0) | 2024.07.21 |
---|---|
[Python] 참조(Reference) + 복사(Copy) (0) | 2024.07.05 |
map()함수 (0) | 2024.06.09 |
lambda()함수 (0) | 2024.06.09 |
리스트 컴프리헨션(list comprehension) (0) | 2024.06.09 |