본문 바로가기

Data Science/Python

Python - Pandas tricks

cols = ['beer_servings', 'continent']
small_drinks = pd.read_csv('http://bit.ly/drinksbycountry', usecols=cols)
small_drinks.info()

본 글은 data school의 pandas tricks을 설명한 영상을 보고 작성한 글입니다.

pandas tricks은 데이터를 더 빠르고 보기 좋게 작성하는데 도움이 됩니다.

 

1. Pandas version 확인

#pandas 버전 확인

pd.__version__

#pandas 내부 속성 버전 확인

pd.show_versions()

 

2. Example data frame 만들기

np.random.rand(4,8)으로 4개의 row, 8개의 column을 가진 data frame을 생성할 수 있다.

pd.DataFrame(np.random.rand(4,8), columns=list('abcdefgh'))

 

 

3. Column명 변경

세가지 모두 동일한 방법으로 'col one', 'col two'로 네이밍 되어있는 column을 'col_one', 'col_two'로 변환하는 방법이다.

#1
df = df.rename({'col one':'col_one', 'col two': 'col_two'}, axis='columns')
#2
df.columns = ['col_one', 'col_two']
#3
df.columns = df.columns.str.replace(' ', '_')

 

#1 : df.rename({'변경 전 컬럼명' : '변경할 컬럼명'})

#2 : df.columns = ['변경할 컬럼명']

#3 : df.columns = df.columns.str.replace(' ', '_') #공백 문자열을 언더바(_)로 변환

 

4. Row 순서 변경

데이터를 불러온 후 loc연산자를 이용해 row의 순서를 반대로 바꿀 수 있다.

* loc : index를 기준으로 row 데이터를 추출하는 연산자

drinks.head()

 

 

index를 보면 데이터의 row 순서가 변경된 걸 확인할 수 있다. 

drinks.loc[::-1].head()

 

 

만약 index가 0에서 시작하도록 변경하고 싶다면, 아래의 코드를 통해 바꿀 수 있다.

drinks.loc[::-1].reset_index(drop=True).head()

 

 

index는 0으로 재설정 되었지만, feature는 역순으로 남아있는 것을 확인할 수 있다.

 

5. Column 순서 변경

row 순서를 변경하는 방법과 유사하다.

쉼표 앞에 있는 콜론(:)은 모든 행을 선택하는 것을 쉼표 뒤에 있는 ::-1 은column반전을 의미한다. 

drinks.loc[:,::-1].head()

 

 

6. 데이터 유형 별 열 선택

데이터에서 특정 유형의 데이터 타입만 불러오고 싶을 경우에는 select_dtypes를 이용한다.

아래 코드는 숫자형 데이터를 선택했지만, 만약 문자열 데이터를 불러오고 싶으면 'number' -> 'string'으로 바꿔주면 된다.

drinks.select_dtypes(include = 'number').head()

 

 

특정 데이터 타입을 제외한 나머지 데이터 타입을 불러오고 싶을 경우에는 include -> exclude로 바꿔준다.

drinks.select_dtypes(exclude = 'number').head()

 

 

7. 문자열을 숫자로 변환

문자열로 되어있는 데이터의 수학적 연산이 필요할 경우에는 숫자형 데이터로 변환하는 과정이 필요하다.

아래와 같은 object형 데이터를 생성하였다.

df = pd.DataFrame({'a':['10', '20', '30'],
                   'b':['40', '50', '60'],
                   'c':['70', '80', '-90']})
df.types

 

 

data frame 형 변환을 하는 방법은 아래와 같이 2가지가 있다. 

#1
df2 = df.apply(pd.to_numeric)

#2
df3 = df.astype({'a': int, 'b' : int, 'c': int})

df2.types
df3.types

 

 

 

8. DataFrame 메모리 사이즈 줄이기

대용량의 데이터를 Data frame으로 읽을 때 사이즈를 줄여할 상황이 생길 수  있다.

 

#data size 확인
drinks.info(memory_usage='deep')

'momory_usage'로 메모리 사용량을 확인할 수 있다. drinks data는 30.5KB를 사용하고 있다.

 

대용량의 데이터를 읽어들일 때 문제가 있거나 메모리가 데이터를 읽어들이지 못할 경우 사용하는 방법을 2단계로 알아보자.

 

8_1. 필요한 column만 불러온다.

 

첫번째는 'usecols'를 사용하여 내가 필요한 column만 불러온다.

아래 코드는 drinks 데이터의 beer_serving, continent만 불러오는 것으로 코드를 작성한 것이다.

cols = ['beer_servings', 'continent']
small_drinks = pd.read_csv('http://bit.ly/drinksbycountry', usecols=cols)
small_drinks.info(memory_usage='deep')

메모리 사용량이 13.7KB로 감소한 것을 확인할 수 있다.

두번째는 'dtype'을 사용하여 object type column을 category type column으로 변경하는 것이다.

dtypes = {'continent' : 'category'}
smaller_drinks = pd.read_csv('http://bit.ly/drinksbycountry', usecols=cols, dtype = dtypes)
smaller_drinks.info(memory_usage='deep')

메모리 사용량이 2.4KB로 감소한 것을 확인할 수 있다.

 

'Data Science > Python' 카테고리의 다른 글

Python 결측치 처리  (0) 2021.01.14
python으로 카이제곱 검정  (0) 2021.01.06
Python으로 T-test  (0) 2021.01.05
matplotlib - bar chart  (0) 2021.01.05
Colab 로컬에서 파일 불러오기  (0) 2021.01.04