Studio KimHippo :D
[Python / pandas] 1. Pandas 객체 본문
# -*- 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 |
---|