pandas의 여러가지 트릭

jaehyukchoi·2021년 1월 4일
2
post-thumbnail

pandas tricks

Rename columns

컬럼 이름을 바꿔주는 것은 여러가지 방법이 있다.

df = df.rename({'col one':'col_one', ...}, axis='columns')

이런 식으로 old name과 new name을 적어줄 수 있고

df.columns = ['col_one', 'col_two']

이런 식으로 overwrite 할 수도 있다

단순히 공백을 언더스코어로 바꿔주고 싶다면

df.columns = df.columns.str.replace(' ', '_')

이렇게 replace 메서드를 활용할 수도 있다. 세 방법 모두 같은 결과가 나온다

Reverse row order

df.loc[::-1] 

파이썬에서 리스트를 reverse 하는 것처럼 똑같이 가능하다
이 경우 index번호가 내림차순이 되면

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

reset_index를 활용해 기존 index를 drop하면서 다시 쓸 수 있다

Reverse column order

df.loc[:, ::-1]

앞에 있는 콜론은 모든 행을 선택한다는 의미
뒤에 ::-1은 컬럼을 reverse한다는 의미.
제일 앞에(왼쪽) 있었던 컬럼이 제일 뒤로(오른쪽) 가게 된다.

Select columns by data type

df에서 특정한 data type의 컬럼만 뽑아내고 싶다면

df.select_dtypes(include='number') int, float 포함

select_dtypes를 활용하면 가능하다. 여러가지를 쓰고 싶으면 리스트 안에 하나하나 써주면 된다.
또한 include 뿐만 아니라 exclude 도 가능하다.

Convert strings to numbers

일반적인 경우

df.astype({'col_one':'float', 'col_two':...

를 활용해 가능하다. 하지만 0을 나타내려고 쓰인 '-'와 같은 것이 있다면 pandas가 이해하지 못한다. 이 경우에는 to_numeric 를 사용.

pd.to_numeric(df.col_three, errors='coerce')

invalid input은 NaN 으로 하겠다.
이후 .fillna(0)을 활용해 대체해줄 수 있음.

이 모든 걸 apply로 한번에 가능.

df = df.apply(pd.to_numeric, error='coerce').fillna(0)

Create a DataFrame from the clipboard

엑셀 파일에 있는 데이터를 그대로 가져다 쓰고 싶다면?

df = pd.read_clipboard()

를 활용하면 가능하다.
index도 그대로 인식한다!

Filter a DataFrame by multiple categories

많은 데이터들 중에서 내가 원하는 조건에 맞는 것만 간추리고 싶다면?

movies[(movies.genre == 'Action' | (movies.genre == 'Drama') | ...

이렇게 or를 사용하는 것도 가능하지만

movies[movie.genre.isin(['Action', 'Drama', 'Western'])

이런 식으로 isin 메서드를 활용하면 더 간편하다.
이것들을 제외한 것만 보고 싶다면?

movies[~movie.genre.isin(['Action', 'Drama', 'Western'])

이렇게 앞에 ~(not)을 붙여 가능.

Filter a DataFrame by largest categories

영화를 가장 많은 장르에 속한 것만 필터하고 싶다면

counts = movies.genre.value_counts()

하게 되면

Drama 278
Comedy 156 ...

쭈욱 나온다.

counts.nlargest(3).index

를 활용해 index를 뽑아낼 수 있고

movies[movies.genre.isin(counts.nlargest(3).index)]

이렇게 isin 메서드를 활용해 세 가지 장르에 속한 것만 볼 수 있다.

Split a string into multiple columns

예를 들어 John Arthur Doe라는 하나의 name 컬럼을 세 개로 쪼개고 싶다면? 이 방법으로 가능하다.

df.name.str.split(' ', expand=True)

Select a slice of rows and columns

describe 메서드를 활용하면 df의 numeric한 요약정보를 볼 수 있음.
근데 너무 많아서 줄이고 싶다면?

df.decribe().loc['min':'max', 'Pclass':'Parch']

앞에 거는 행, 뒤에 거는 열.
describe하게 되면 count, mean부터.. min 25%.. 쭉 나옴.

Convert continuous data into categorical data

pd.cut(titanic.Age, bins=[0, 18, 25, 99], labels=['child', 'young adult', 'adult'])

이렇게 cut 메서드를 이용해 연속적인 데이터를 범주 데이터로 바꿀 수 있다.

[출처] Youtube, Top 25 pandas tricks

profile
웹, AI 개발 공부.

1개의 댓글

comment-user-thumbnail
2021년 1월 4일

멋쟁이

답글 달기