Data Frame 만들고 Filter 하고 query 하기 pandas(판다스)

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

댓글 없음:

댓글 쓰기

css cheat sheet 클래스 선택자, margin(마진), display , center 조정 간단한 구성 요소

 앞에서는 html의 간단한 sheet를 소개 하였습니다.   html은  주로 골격을 나타나는 것이라, 디자인을 하는데는 css로 하여야 합니다.  아래 코드와 같이 css 관련 하여 매우 간단하게 코딩 하겠습니다.  body 부분의 css 코딩  ...