Pandas (Python Data Analysis Library)
앞선 포스팅에 이어 Pandas 중고급 문법 튜토리얼입니다. 본 포스팅은 해당 포스팅을 참고하였습니다.
5. 컬럼명, 인덱스명 수정하기
df = pd.DataFrame(data=np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]), columns=['A', 'B', 'C']) display(df) # Define the new names of your columns newcols = { 'A': 'new_column_1', 'B': 'new_column_2', 'C': 'new_column_3' } # Use `rename()` to rename your columns df.rename(columns=newcols, inplace=True) # Rename your index df.rename(index={1: 'a'})
이번엔 기본기를 넘어 pandas의 고급 문법들을 살펴 보자.
6. 데이터 Formatting
Replace
dataframe의 특정 문자열을 바꾸고 싶을 때는 replace를 이용한다.
df = pd.DataFrame(data=np.array([["Awful", "Poor", "OK"], ["OK", "Acceptable", "Perfect"], ["Poor", "Poor", "OK"]]), columns=['A', 'B', 'C']) display(df) display(df.replace("Awful", "Nice")) # Replace the strings by numerical values (0-4) display(df.replace(['Awful', 'Poor', 'OK', 'Acceptable', 'Perfect'], [0, 1, 2, 3, 4]))
String의 일부 제거
map function과 lambda를 이용해 특정 컬럼의 모든 데이터에 함수를 적용시킬 수 있다.
df = pd.DataFrame(data=np.array([[1, 2, "+6a"], [4, 5, "+3b"], [5, 5, "+2C"]]), columns=['A', 'B', 'result']) # Check out your DataFrame display(df) # Delete unwanted parts from the strings in the `result` column df['result'] = df['result'].map(lambda x: x.lstrip('+-').rstrip('aAbBcC')) # Check out the result again display(df)
7. 열 또는 행에 함수 적용하기
map 또는 apply 함수를 이용한다.
df = pd.DataFrame(data=np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]), columns=['A', 'B', 'C']) doubler = lambda x: x*2 print(df.head()) print(df['A'].map(doubler)) print(df.apply(doubler)) print(df.iloc[1].apply(doubler))
A B C 0 1 2 3 1 4 5 6 2 7 8 9 0 2 1 8 2 14 Name: A, dtype: int64 A B C 0 2 4 6 1 8 10 12 2 14 16 18 A 8 B 10 C 12 Name: 1, dtype: int64
8. 빈 데이터 프레임 만들기 (Creating empty dataframe)
가끔 빈 데이터 프레임을 만들고, 그 곳에 값을 채워야할 경우가 있다. 이것을 하기 위해서는 인덱스와 컬럼을 만든 후, np.nan 을 채워주면 된다.
df = pd.DataFrame(np.nan, index=[0,1,2,3], columns=['A']) print(df)
그 속에 값을 채워넣고 싶으면 아래처럼 할 수 있다.
df.loc[1, 'A'] = "A"
9. 데이터 임포트시, 날짜, 시간 parsing 하기
만약 날짜 시간으로된 컬럼을 datatime 으로 parsing 하기 위해서는 read_csv 메소드의 parse_dates 를 이용할 수 있다.
import pandas as pd dateparser = lambda x: pd.datetime.strptime(x, '%Y-%m-%d %H:%M:%S') # Which makes your read command: pd.read_csv(infile, parse_dates=['columnName'], date_parser=dateparse) # Or combine two columns into a single DateTime column pd.read_csv(infile, parse_dates={'datetime': ['date', 'time']}, date_parser=dateparse)
10. 데이터프레임 재구성하기
pivot 함수를 통해 index, column, values 를 지정하여 재구성할 수 있다.
import pandas as pd products = pd.DataFrame({'category': ['Cleaning', 'Cleaning', 'Entertainment', 'Entertainment', 'Tech', 'Tech'], 'store': ['Walmart', 'Dia', 'Walmart', 'Fnac', 'Dia','Walmart'], 'price':[11.42, 23.50, 19.99, 15.95, 55.75, 111.55], 'testscore': [4, 3, 5, 7, 5, 8]}) print(products) pivot_products = products.pivot(index='category', columns='store', values='price') print(pivot_products)
category store price testscore 0 Cleaning Walmart 11.42 4 1 Cleaning Dia 23.50 3 2 Entertainment Walmart 19.99 5 3 Entertainment Fnac 15.95 7 4 Tech Dia 55.75 5 5 Tech Walmart 111.55 8 store Dia Fnac Walmart category Cleaning 23.50 NaN 11.42 Entertainment NaN 15.95 19.99 Tech 55.75 NaN 111.55
Stack & Unstack
pivot 함수를 이용할 수도 있지만, stack 과 unstack 함수를 이용하여 pivoting 을 할 수 있다. stack 은 column index를 raw index로 바꾸어 데이터프레임이 길어지고, unstack 은 raw index를 column index로 바꾸어 데이터프레임이 넓어진다.
Stack 과 Unstack 의 개념도
본 포스팅에서는 간단한 개념만 설명하며, 테이블 pivoting 관련해서는 이 페이지 (https://nikgrozev.com/2015/07/01/reshaping-in-pandas-pivot-pivot-table-stack-and-unstack-explained-with-pictures/) 가 정리가 잘 되어있으니 참고하시면 좋을 것 같다.
melt 함수
melt 함수는 column 을 row로 바꾸어준다. 녹으면 흘러내리니까 column 이 raw로 흘러려 column 이 짧아지고 raw 는 길어진다고 이해하면 쉽다.
# The `people` DataFrame people = pd.DataFrame({'FirstName' : ['John', 'Jane'], 'LastName' : ['Doe', 'Austen'], 'BloodType' : ['A-', 'B+'], 'Weight' : [90, 64]}) print(people) # Use `melt()` on the `people` DataFrame print(pd.melt(people, id_vars=['FirstName', 'LastName'], var_name='measurements'))
FirstName LastName BloodType Weight 0 John Doe A- 90 1 Jane Austen B+ 64 FirstName LastName measurements value 0 John Doe BloodType A- 1 Jane Austen BloodType B+ 2 John Doe Weight 90 3 Jane Austen Weight 64
11. 데이터 프레임 반복하기
iterrows 함수를 이용하여 iteration 할 수 있다. 매우 유용하다.
df = pd.DataFrame(data=np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]), columns=['A', 'B', 'C']) for index, row in df.iterrows() : print(row['A'], row['B'])
1 2 4 5 7 8
'Tools > Python' 카테고리의 다른 글
나만의 주피터 노트북 환경을 만들어보자 (nbextension, jupyter-theme) (0) | 2018.10.04 |
---|---|
Python으로 하는 탐색적 자료 분석 (Exploratory Data Analysis) (7) | 2018.08.24 |
Python - Pandas 튜토리얼 (데이터프레임 생성, 접근, 삭제, 수정) (12) | 2018.03.21 |
Python 중고급 - 정규표현식, 클래스 (0) | 2018.03.18 |
Python - SSL 에러 해결 (1) | 2018.03.04 |