Studio KimHippo :D

[Python / pandas] 1. Pandas 객체 본문

Python Study/Pandas

[Python / pandas] 1. Pandas 객체

김작은하마 2019. 7. 8. 17:38
# -*- coding : utf-8 -*-
import pandas as pd
import numpy as np
# NOTE 
# Series : 인덱싱된 데이터의 1차원 배열
data = pd.Series([0.25, 0.50, 0.75, 1.00])
print(data, '\n')

# NOTE : Series는 일련의 값과 인덱스를 모두 감싸고 있다.
# NOTE : 값과 인덱스는 각각 values와 index 속성으로 접근할 수 있다.
print(data.values)
print(data.index)


# NOTE 
# NumPy 배열은 인덱스가 정수로 정해져 있지만,
# Pandas의 Series는 인덱스가 어떤 타입의 값으로도 구성할 수 있다.

data2 = pd.Series([0.25, 0.50, 0.75, 1.00], index = ['a', 'b', 'c', 'd'])
print(data2, '\n')
print(data2['b'], '\n')

data3 = pd.Series([0.25, 0.50, 0.75, 1.00], index = [2, 5, 3, 7])
print(data3, '\n')
print(data3[5])

Out [1] :

0 0.25

1 0.50

2 0.75

3 1.00

dtype: float64

 

Out [2] : 

[0.25 0.5 0.75 1. ]

RangeIndex(start=0, stop=4, step=1)

 

Out [3] :

a 0.25

b 0.50

c 0.75

d 1.00

dtype: float64

 

Out [4] : 

0.5

 

Out [5] : 

2 0.25

5 0.50

3 0.75

7 1.00

dtype: float64 0.5

pop_dict = {'California' : 38332521,
            'Texas' : 26448193,
            'New York' : 19651127,
            'Florida' : 19552860,
            'Illinois' : 12882135 }

pop = pd.Series(pop_dict)
print(pop, '\n')
print(pop['California'], '\n')
print(pop['California' :'New York'])

# NOTE
# Pandas Series의 기본적인 구조 pd.Series(data, index = index)
# data : 리스트나 NumPy 배열인 경우 index : 정수
# data : 딕셔너리인 경우 index : 딕셔너리 키를 정렬해서 취함.

pd.Series({2 : 'a' , 1 : 'b', 3 : 'c'})

Out [1] : 

California 38332521

Texas 26448193

New York 19651127

Florida 19552860

Illinois 12882135

dtype: int64

 

Out [2] : 

38332521

 

Out [3] :

California 38332521

Texas 26448193

New York 19651127

dtype: int64

 

Out [4] :

2 a

1 b

3 c

dtype: object

# NOTE
# DataFrame : 유연한 행 인덱스와 유연한 열 이름을 가진 2차원 배열
# 정렬(같은 인덱스를 공유)된 Series 객체의 연속

area_dict = {
    'California' : 423967,
    'Texas' : 695662,
    'New York' : 141297,
    'Florida' : 170312,
    'Illinois' : 149995
}

area = pd.Series(area_dict)
states = pd.DataFrame({'Population' : pop,
                       'Area' : area})

print(states, '\n')
print(states.index, '\n')
print(states.values, '\n')

# NOTE 
# DataFrame은 Seires들의 집합이므로, 열 하나하나는 Seires와 같다.

print(pd.DataFrame(pop, columns = ['Population']))

Out [1] :

              Population    Area

California  38332521     423967

Texas       26448193     695662

New York 19651127      141297

Florida     19552860      170312

Illinois      12882135      149995

 

Out [2] :

Index(['California', 'Texas', 'New York', 'Florida', 'Illinois'], dtype='object')

 

Out [3] : 

[[38332521 423967]

 [26448193 695662]

 [19651127 141297]

 [19552860 170312]

 [12882135 149995]]

 

Out [4] :

                 Population

California     38332521

Texas          26448193

New York     19651127

Florida         19552860

Illinois          12882135

data4 = [{'a' : rep, 'b' : 2*rep}
         for rep in range(3)]
pd.DataFrame(data4)

# NOTE : 딕셔너리 일부 키가 누락되더라도 누락된 자리를 NaN값으로 채워줌.
print(pd.DataFrame([{'a' : 1, 'b' : 2}, {'b' : 3, 'c' : 4}]))

# NOTE
# 데이터의 2차원 배열이 주어지면 지정된 열과 인덱스 이름을 가진  DataFrame 생성 가능

print(pd.DataFrame(np.random.rand(3, 2),
                   columns = ['foo', 'bar'],
                   index = ['a', 'b', 'c']))

A = np.zeros(3, dtype = [('A', 'i8'), ('B', 'f8')])
pd.DataFrame(A)

Out [1] :

        a   b

0      0   0

1      1   2

2      2   4

 

Out [2] :

   a      b   c

0 1.0    2   NaN

1 NaN  3   4.0

 

Out [3] :

     foo          bar

a   0.977764   0.776775

b   0.807102   0.146802

c   0.451147   0.743953

 

Out [4] :

     A      B

0   0       0.0

1   0       0.0 

2   0       0.0

# NOTE
# Index : 불변의 배열이나 정렬된 집합( Index 객체가 중복되는 값을 포함할 수 있으므로 기술적으로 중복집합)

ind = pd.Index([2, 3, 5, 7, 11])
ind

# NOTE 
# Index 객체는 배열처럼 표준 파이썬 인덱싱 표기법을 사용해 값이나 슬라이스를 가져올 수 있다.

print(ind[1])
print(ind[::2])

# NOTE
# Index 객체는 NumPy 배열에서 익숙한 속성이 많이 있지만,
# Index 객체는 일반적인 방법으로는 변경될 수 없는 불변의 값이다.

print(ind.size, ind.shape, ind.ndim, ind.dtype)

# NOTE
# Index 객체는 대체로 파이썬에 내장된 set 데이터 구조에서 사용되는 따르기 때문에
# 합집합, 교집합, 차집합을 비롯해 그 밖의 조합들이 익숙한 방식으로 계산됨.

indA = pd.Index([1, 3, 5, 7, 9])
indB = pd.Index([2, 3, 5, 7, 11])

# NOTE : 교집합
print(indA & indB)

# NOTE : 합집합
print(indA | indB)

# NOTE : 대칭 차집합
print(indA ^ indB)

Out [1] :

Int64Index([2, 3, 5, 7, 11], dtype='int64')

 

Out [2] :

3

Int64Index([2, 5, 11], dtype='int64')

5 (5,) 1 int64

 

Out [3] :

Int64Index([3, 5, 7], dtype='int64')

Int64Index([1, 2, 3, 5, 7, 9, 11], dtype='int64')

Int64Index([1, 2, 9, 11], dtype='int64')

 

참고

O'REILLY 제이크 밴더플래스 저/ 위키북스 김정인 역 - 파이썬 데이터 사이언스 핸드북

'Python Study > Pandas' 카테고리의 다른 글

[Python / Pandas] 2. Series 인덱싱, 슬라이싱  (0) 2019.07.08
Comments