데이터분석 기록일지

파이썬

[Pandas] 기본 함수 정리

야하루 2024. 8. 16. 21:34
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