Pandas는 DataFrame을 아주 쉽게 파이썬에서 사용할 수 있도록 만든것이다. 서적에는 원리나, 기본적인 방법을 설명하는 것이 매우 많이 적혀 있지만, 실무에서 거의 쓰지 않는 것까지 포함되어 있다. 이 부분은 다른 언어(R)로 주로 일을 하였지만, 실제 실무에서 많이 사용하는 것만 정리 하겠다. 쓰지 않는 것 까지 익히려고 애를 쓰게 되면 될 수록 학습의 피로감만 높아 진다.
1. 시리즈(Serise)
Pandas의 시리즈는 numpy array함수에서 지원하는 각종 계산함수들을 지원하며, 이를 묶어 데이터 프레임으로 만들 수 있다. 아래는 시리즈의 간단한 예제부터 설명할 것이다.
import pandas as pd
# 간단한 시리즈 예제
s = pd.Series(['banana', 42])
s
## 0 banana
## 1 42
## dtype: object
pandas serise를 이용해서 Dataframe을 만든다.
# pandas Serise만들기
Name = pd.Series(['Rosaline Franklin', 'William Gosset']) #이름
Occupation = pd.Series(['Chemist', 'Statistician']) #직업
Born = pd.Series(['1920-07-25', '1876-06-13']) # 출생일
Died = pd.Series(['1958-04-16', '1937-10-16']) #사망일
Age = pd.Series([37, 61]) #사망나이
위와 같이 Data.frame을 만들기 위한 Serise를 만든다. 이것이 모여서 DataFrame을 형성 한다.
2. 데이터 프레임(DataFame)
DataFrame을 만드는데, “(” 소괄호, “{” 중괄호 를 이용해서, 데이터 프레임을 만든다. 이것은 일반적인 Open Source 프로그래밍과 문법은 거의 흡사하다. MongoDB, Spark등등.. 어찌 되었든 작성 하는데는 매우 복잡한데, 파이썬의 데이터 프레임을 아주 잘 알게 되면, 다른 오픈소스 프로그램과 호환을 어렵지 않게 할 수 있다.
아래는 앞에서 Serise로 정의한 과학자를 Serise를 DataFrame으로 만든다.
# Serise를 이용한 데이터 프레임 만들기
scientists = pd.DataFrame({
'Name': Name,
'Occupation': Occupation,
'Born' : Born,
'Died' : Died,
'Age' : Age })
scientists
## Name Occupation Born Died Age
## 0 Rosaline Franklin Chemist 1920-07-25 1958-04-16 37
## 1 William Gosset Statistician 1876-06-13 1937-10-16 61
3. 데이터 필터(filter)
Pandas DataFrame의 일반적인 검색 방법이다. 일반적으로 하나만 필터 할때, 단순하지만, AND 나 OR 조건으로 하였을 경우에는 매우 복잡하다.
# 37년 동안 살았던 사람 검색하기
scientists[scientists['Age'] == 37 ]
## Name Occupation Born Died Age
## 0 Rosaline Franklin Chemist 1920-07-25 1958-04-16 37
사망한 나이가 37살이고, 화학자(Chemist) 검색하기
# And 문 검색하기
scientists[(scientists['Age'] == 37) & (scientists['Occupation'] == 'Chemist')]
## Name Occupation Born Died Age
## 0 Rosaline Franklin Chemist 1920-07-25 1958-04-16 37
사망한 나이가 37살이고, 통계학자 (Statistician) 검색하기
# Or 문 검색하기
scientists[(scientists['Age'] == 37) | (scientists['Occupation'] == 'Statistician')]
## Name Occupation Born Died Age
## 0 Rosaline Franklin Chemist 1920-07-25 1958-04-16 37
## 1 William Gosset Statistician 1876-06-13 1937-10-16 61
Or 조건이므로 당연히, 모든 데이터가 나온다.
4.query 함수사용
위와 같이 기본적인 와일드 카드를 이용해서 필터링 해도 되지만, 이것 보다는 간편한 방법이 있다. qeury라는 Series에 있는 method 이다. 그런데 실무에 응용할 문자열 스트링은 C언어에 가깝다. 어찌 되었든 간에, Python은 데이터를 다루는 패키지이지만, 일반적인 Data.Frame에서는 R보다는 코드를 아주 많이 쳐야 하며, 좀 더 복잡하게 접근 해야 하는 것은 사실이다.
type(scientists.query)
## <class 'method'>
# 기본적인 필터 실행 하기
scientists.query('Age == 37')
## Name Occupation Born Died Age
## 0 Rosaline Franklin Chemist 1920-07-25 1958-04-16 37
# 인수를 받아서 시행 하기
age = 37
scientists.query('Age == %d.'%age)
## Name Occupation Born Died Age
## 0 Rosaline Franklin Chemist 1920-07-25 1958-04-16 37
# And 조건 시행하기
scientists.query('Age == 37 & Occupation == "Chemist"')
## Name Occupation Born Died Age
## 0 Rosaline Franklin Chemist 1920-07-25 1958-04-16 37
# Serise 함수 사용하여 평균 만들기
scientists.Age.mean()
## 49.0
댓글 없음:
댓글 쓰기