from pandas import Series, DataFrame
import pandas as pd
from pandas import Series, DataFrame
import pandas as pd
obj = Series([4, 7, -5, 3])
# Error! 배열이나 사전형으로 넘겨야 됨
obj2 = Series(4,7)
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-4-30f352d974a3> in <module>() 1 # Error! 배열이나 사전형으로 넘겨야 됨 ----> 2 obj2 = Series(4,7) /Library/Python/2.7/site-packages/pandas-0.12.0_307_g3a2fe0b-py2.7-macosx-10.8-intel.egg/pandas/core/series.pyc in __init__(self, data, index, dtype, name, copy, fastpath) 584 585 if index is not None: --> 586 index = _ensure_index(index) 587 588 if data is None: /Library/Python/2.7/site-packages/pandas-0.12.0_307_g3a2fe0b-py2.7-macosx-10.8-intel.egg/pandas/core/index.pyc in _ensure_index(index_like, copy) 2995 index_like = copy(index_like) 2996 -> 2997 return Index(index_like) 2998 2999 /Library/Python/2.7/site-packages/pandas-0.12.0_307_g3a2fe0b-py2.7-macosx-10.8-intel.egg/pandas/core/index.pyc in __new__(cls, data, dtype, copy, name, fastpath, **kwargs) 129 elif np.isscalar(data): 130 raise TypeError('Index(...) must be called with a collection ' --> 131 'of some kind, %s was passed' % repr(data)) 132 else: 133 # other iterable of some kind TypeError: Index(...) must be called with a collection of some kind, 7 was passed
obj
0 4 1 7 2 -5 3 3 dtype: int64
obj.values
array([ 4, 7, -5, 3])
obj.index
Int64Index([0, 1, 2, 3], dtype=int64)
obj2 = Series([4, 7, -5, 3], index=['d', 'b', 'a', 'c'])
obj2
d 4 b 7 a -5 c 3 dtype: int64
obj2.index
Index([u'd', u'b', u'a', u'c'], dtype=object)
obj2['a']
-5
obj2['d'] = 6
obj2[['c', 'a', 'd']]
c 3 a -5 d 6 dtype: int64
obj2
d 6 b 7 a -5 c 3 dtype: int64
obj2[obj2 > 0]
d 6 b 7 c 3 dtype: int64
obj2 * 2
d 12 b 14 a -10 c 6 dtype: int64
np.exp(obj2)
d 403.428793 b 1096.633158 a 0.006738 c 20.085537 dtype: float64
'b' in obj2
True
'e' in obj2
False
sdata = {'Ohio': 35000,
'Texas': 71000,
'Oregon': 16000,
'Utah': 5000}
obj3 = Series(sdata)
obj3
Ohio 35000 Oregon 16000 Texas 71000 Utah 5000 dtype: int64
states = ['California', 'Ohio', 'Oregon', 'Texas']
obj4 = Series(sdata, index=states)
obj4
California NaN Ohio 35000 Oregon 16000 Texas 71000 dtype: float64
pd.isnull(obj4)
California True Ohio False Oregon False Texas False dtype: bool
pd.notnull(obj4)
California False Ohio True Oregon True Texas True dtype: bool
obj4.isnull()
California True Ohio False Oregon False Texas False dtype: bool
obj4.notnull()
California False Ohio True Oregon True Texas True dtype: bool
obj3
Ohio 35000 Oregon 16000 Texas 71000 Utah 5000 dtype: int64
obj4
California NaN Ohio 35000 Oregon 16000 Texas 71000 dtype: float64
obj3 + obj4
California NaN Ohio 70000 Oregon 32000 Texas 142000 Utah NaN dtype: float64
obj4.name = 'population'
obj4.index.name = 'state'
obj4
state California NaN Ohio 35000 Oregon 16000 Texas 71000 Name: population, dtype: float64
obj
0 4 1 7 2 -5 3 3 dtype: int64
obj.index = ['Bob', 'Steve', 'Jeff', 'Ryan']
obj
Bob 4 Steve 7 Jeff -5 Ryan 3 dtype: int64
# 색인의 갯수를 맞춰줘야 한다. 당연하지.
obj.index = ['Bob', 'Steve', 'Jeff']
--------------------------------------------------------------------------- Exception Traceback (most recent call last) <ipython-input-39-f453eb87918d> in <module>() 1 # 색인의 갯수를 맞춰줘야 한다. 당연하지. ----> 2 obj.index = ['Bob', 'Steve', 'Jeff'] /Library/Python/2.7/site-packages/pandas-0.12.0_307_g3a2fe0b-py2.7-macosx-10.8-intel.egg/pandas/core/generic.pyc in __setattr__(self, name, value) 1271 existing = getattr(self, name) 1272 if isinstance(existing, Index): -> 1273 object.__setattr__(self, name, value) 1274 elif name in self._info_axis: 1275 self[name] = value /Library/Python/2.7/site-packages/pandas-0.12.0_307_g3a2fe0b-py2.7-macosx-10.8-intel.egg/pandas/lib.so in pandas.lib.AxisProperty.__set__ (pandas/lib.c:30028)() /Library/Python/2.7/site-packages/pandas-0.12.0_307_g3a2fe0b-py2.7-macosx-10.8-intel.egg/pandas/core/series.pyc in _set_axis(self, axis, labels, fastpath) 707 object.__setattr__(self, '_index', labels) 708 if not fastpath: --> 709 self._data.set_axis(axis, labels) 710 711 def _set_subtyp(self, is_all_dates): /Library/Python/2.7/site-packages/pandas-0.12.0_307_g3a2fe0b-py2.7-macosx-10.8-intel.egg/pandas/core/internals.pyc in set_axis(self, axis, value) 3031 if len(value) != len(cur_axis): 3032 raise Exception('Length mismatch (%d vs %d)' -> 3033 % (len(value), len(cur_axis))) 3034 self.axes[axis] = value 3035 self._shape = None Exception: Length mismatch (3 vs 4)
data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada'],
'year': [2000, 2001, 2002, 2001, 2002],
'pop': [1.5, 1.7, 3.6, 2.4, 2.9]}
frame = DataFrame(data)
frame
pop | state | year | |
---|---|---|---|
0 | 1.5 | Ohio | 2000 |
1 | 1.7 | Ohio | 2001 |
2 | 3.6 | Ohio | 2002 |
3 | 2.4 | Nevada | 2001 |
4 | 2.9 | Nevada | 2002 |
# 원하는 순서대로 Column 지정 가능
# SQL에서 SELECT year, state pop FROM data 와 비슷하게 컬럼명 순서를 지정할 수 있다.
DataFrame(data, columns=['year', 'state', 'pop'])
year | state | pop | |
---|---|---|---|
0 | 2000 | Ohio | 1.5 |
1 | 2001 | Ohio | 1.7 |
2 | 2002 | Ohio | 3.6 |
3 | 2001 | Nevada | 2.4 |
4 | 2002 | Nevada | 2.9 |
frame2 = DataFrame(data, columns=['year', 'state', 'pop', 'debt'],
index=['one', 'two', 'three', 'four', 'five'])
frame2
year | state | pop | debt | |
---|---|---|---|---|
one | 2000 | Ohio | 1.5 | NaN |
two | 2001 | Ohio | 1.7 | NaN |
three | 2002 | Ohio | 3.6 | NaN |
four | 2001 | Nevada | 2.4 | NaN |
five | 2002 | Nevada | 2.9 | NaN |
frame2.columns
Index([u'year', u'state', u'pop', u'debt'], dtype=object)
type(frame2)
pandas.core.frame.DataFrame
frame2['state']
one Ohio two Ohio three Ohio four Nevada five Nevada Name: state, dtype: object
frame2.state
one Ohio two Ohio three Ohio four Nevada five Nevada Name: state, dtype: object
frame2.year
one 2000 two 2001 three 2002 four 2001 five 2002 Name: year, dtype: int64
frame2.ix['three']
year 2002 state Ohio pop 3.6 debt NaN Name: three, dtype: object
# error 컬럼값인 year를 넣었을 시
frame2.ix['year']
--------------------------------------------------------------------------- KeyError Traceback (most recent call last) <ipython-input-52-d889787286f0> in <module>() 1 # error 컬럼값인 year를 넣었을 시 ----> 2 frame2.ix['year'] /Library/Python/2.7/site-packages/pandas-0.12.0_307_g3a2fe0b-py2.7-macosx-10.8-intel.egg/pandas/core/indexing.pyc in __getitem__(self, key) 52 return self._getitem_tuple(key) 53 else: ---> 54 return self._getitem_axis(key, axis=0) 55 56 def _get_label(self, label, axis=0): /Library/Python/2.7/site-packages/pandas-0.12.0_307_g3a2fe0b-py2.7-macosx-10.8-intel.egg/pandas/core/indexing.pyc in _getitem_axis(self, key, axis) 582 return self._get_loc(key, axis=axis) 583 --> 584 return self._get_label(key, axis=axis) 585 586 def _getitem_iterable(self, key, axis=0): /Library/Python/2.7/site-packages/pandas-0.12.0_307_g3a2fe0b-py2.7-macosx-10.8-intel.egg/pandas/core/indexing.pyc in _get_label(self, label, axis) 64 return self.obj._xs(label, axis=axis, copy=False) 65 except Exception: ---> 66 return self.obj._xs(label, axis=axis, copy=True) 67 68 def _get_loc(self, key, axis=0): /Library/Python/2.7/site-packages/pandas-0.12.0_307_g3a2fe0b-py2.7-macosx-10.8-intel.egg/pandas/core/frame.pyc in xs(self, key, axis, level, copy, drop_level) 2171 drop_level=drop_level) 2172 else: -> 2173 loc = self.index.get_loc(key) 2174 2175 if isinstance(loc, np.ndarray): /Library/Python/2.7/site-packages/pandas-0.12.0_307_g3a2fe0b-py2.7-macosx-10.8-intel.egg/pandas/core/index.pyc in get_loc(self, key) 824 loc : int if unique index, possibly slice or mask if not 825 """ --> 826 return self._engine.get_loc(_values_from_object(key)) 827 828 def get_value(self, series, key): /Library/Python/2.7/site-packages/pandas-0.12.0_307_g3a2fe0b-py2.7-macosx-10.8-intel.egg/pandas/index.so in pandas.index.IndexEngine.get_loc (pandas/index.c:3330)() /Library/Python/2.7/site-packages/pandas-0.12.0_307_g3a2fe0b-py2.7-macosx-10.8-intel.egg/pandas/index.so in pandas.index.IndexEngine.get_loc (pandas/index.c:3210)() /Library/Python/2.7/site-packages/pandas-0.12.0_307_g3a2fe0b-py2.7-macosx-10.8-intel.egg/pandas/hashtable.so in pandas.hashtable.PyObjectHashTable.get_item (pandas/hashtable.c:10484)() /Library/Python/2.7/site-packages/pandas-0.12.0_307_g3a2fe0b-py2.7-macosx-10.8-intel.egg/pandas/hashtable.so in pandas.hashtable.PyObjectHashTable.get_item (pandas/hashtable.c:10438)() KeyError: 'year'
# row name으로는 사전형식으로 접근 불가
frame2['three']
--------------------------------------------------------------------------- KeyError Traceback (most recent call last) <ipython-input-53-c83454b4dc1c> in <module>() 1 # row name으로는 사전형식으로 접근 불가 ----> 2 frame2['three'] /Library/Python/2.7/site-packages/pandas-0.12.0_307_g3a2fe0b-py2.7-macosx-10.8-intel.egg/pandas/core/frame.pyc in __getitem__(self, key) 1827 return self._getitem_multilevel(key) 1828 else: -> 1829 return self._getitem_column(key) 1830 1831 def _getitem_column(self, key): /Library/Python/2.7/site-packages/pandas-0.12.0_307_g3a2fe0b-py2.7-macosx-10.8-intel.egg/pandas/core/frame.pyc in _getitem_column(self, key) 1834 # get column 1835 if self.columns.is_unique: -> 1836 return self._get_item_cache(key) 1837 1838 # duplicate columns /Library/Python/2.7/site-packages/pandas-0.12.0_307_g3a2fe0b-py2.7-macosx-10.8-intel.egg/pandas/core/generic.pyc in _get_item_cache(self, item) 782 res = cache.get(item) 783 if res is None: --> 784 values = self._data.get(item) 785 res = self._box_item_values(item, values) 786 cache[item] = res /Library/Python/2.7/site-packages/pandas-0.12.0_307_g3a2fe0b-py2.7-macosx-10.8-intel.egg/pandas/core/internals.pyc in get(self, item) 2349 def get(self, item): 2350 if self.items.is_unique: -> 2351 _, block = self._find_block(item) 2352 return block.get(item) 2353 else: /Library/Python/2.7/site-packages/pandas-0.12.0_307_g3a2fe0b-py2.7-macosx-10.8-intel.egg/pandas/core/internals.pyc in _find_block(self, item) 2638 2639 def _find_block(self, item): -> 2640 self._check_have(item) 2641 for i, block in enumerate(self.blocks): 2642 if item in block: /Library/Python/2.7/site-packages/pandas-0.12.0_307_g3a2fe0b-py2.7-macosx-10.8-intel.egg/pandas/core/internals.pyc in _check_have(self, item) 2645 def _check_have(self, item): 2646 if item not in self.items: -> 2647 raise KeyError('no item named %s' % com.pprint_thing(item)) 2648 2649 def reindex_axis(self, new_axis, indexer=None, method=None, axis=0, fill_value=None, limit=None, copy=True): KeyError: u'no item named three'
frame2[0]
--------------------------------------------------------------------------- KeyError Traceback (most recent call last) <ipython-input-54-d9f68b2221a2> in <module>() ----> 1 frame2[0] /Library/Python/2.7/site-packages/pandas-0.12.0_307_g3a2fe0b-py2.7-macosx-10.8-intel.egg/pandas/core/frame.pyc in __getitem__(self, key) 1827 return self._getitem_multilevel(key) 1828 else: -> 1829 return self._getitem_column(key) 1830 1831 def _getitem_column(self, key): /Library/Python/2.7/site-packages/pandas-0.12.0_307_g3a2fe0b-py2.7-macosx-10.8-intel.egg/pandas/core/frame.pyc in _getitem_column(self, key) 1834 # get column 1835 if self.columns.is_unique: -> 1836 return self._get_item_cache(key) 1837 1838 # duplicate columns /Library/Python/2.7/site-packages/pandas-0.12.0_307_g3a2fe0b-py2.7-macosx-10.8-intel.egg/pandas/core/generic.pyc in _get_item_cache(self, item) 782 res = cache.get(item) 783 if res is None: --> 784 values = self._data.get(item) 785 res = self._box_item_values(item, values) 786 cache[item] = res /Library/Python/2.7/site-packages/pandas-0.12.0_307_g3a2fe0b-py2.7-macosx-10.8-intel.egg/pandas/core/internals.pyc in get(self, item) 2349 def get(self, item): 2350 if self.items.is_unique: -> 2351 _, block = self._find_block(item) 2352 return block.get(item) 2353 else: /Library/Python/2.7/site-packages/pandas-0.12.0_307_g3a2fe0b-py2.7-macosx-10.8-intel.egg/pandas/core/internals.pyc in _find_block(self, item) 2638 2639 def _find_block(self, item): -> 2640 self._check_have(item) 2641 for i, block in enumerate(self.blocks): 2642 if item in block: /Library/Python/2.7/site-packages/pandas-0.12.0_307_g3a2fe0b-py2.7-macosx-10.8-intel.egg/pandas/core/internals.pyc in _check_have(self, item) 2645 def _check_have(self, item): 2646 if item not in self.items: -> 2647 raise KeyError('no item named %s' % com.pprint_thing(item)) 2648 2649 def reindex_axis(self, new_axis, indexer=None, method=None, axis=0, fill_value=None, limit=None, copy=True): KeyError: u'no item named 0'
frame2['debt'] = 16.5
frame2
year | state | pop | debt | |
---|---|---|---|---|
one | 2000 | Ohio | 1.5 | 16.5 |
two | 2001 | Ohio | 1.7 | 16.5 |
three | 2002 | Ohio | 3.6 | 16.5 |
four | 2001 | Nevada | 2.4 | 16.5 |
five | 2002 | Nevada | 2.9 | 16.5 |
frame2['debt'] = np.arange(5.)
frame2
year | state | pop | debt | |
---|---|---|---|---|
one | 2000 | Ohio | 1.5 | 0 |
two | 2001 | Ohio | 1.7 | 1 |
three | 2002 | Ohio | 3.6 | 2 |
four | 2001 | Nevada | 2.4 | 3 |
five | 2002 | Nevada | 2.9 | 4 |
# Length of values does not match length of index
frame2['debt'] = np.arange(10)
--------------------------------------------------------------------------- AssertionError Traceback (most recent call last) <ipython-input-59-0ba39660d42a> in <module>() 1 # Length of values does not match length of index ----> 2 frame2['debt'] = np.arange(10) /Library/Python/2.7/site-packages/pandas-0.12.0_307_g3a2fe0b-py2.7-macosx-10.8-intel.egg/pandas/core/frame.pyc in __setitem__(self, key, value) 1922 else: 1923 # set column -> 1924 self._set_item(key, value) 1925 1926 def _setitem_slice(self, key, value): /Library/Python/2.7/site-packages/pandas-0.12.0_307_g3a2fe0b-py2.7-macosx-10.8-intel.egg/pandas/core/frame.pyc in _set_item(self, key, value) 1969 ensure homogeneity. 1970 """ -> 1971 value = self._sanitize_column(key, value) 1972 NDFrame._set_item(self, key, value) 1973 /Library/Python/2.7/site-packages/pandas-0.12.0_307_g3a2fe0b-py2.7-macosx-10.8-intel.egg/pandas/core/frame.pyc in _sanitize_column(self, key, value) 2010 else: 2011 if len(value) != len(self.index): -> 2012 raise AssertionError('Length of values does not match ' 2013 'length of index') 2014 AssertionError: Length of values does not match length of index
val = Series([-1.2, -1.5, -1.7], index=['two', 'four', 'five'])
val
two -1.2 four -1.5 five -1.7 dtype: float64
type(val)
pandas.core.series.Series
frame2['debt'] = val
frame2
year | state | pop | debt | |
---|---|---|---|---|
one | 2000 | Ohio | 1.5 | NaN |
two | 2001 | Ohio | 1.7 | -1.2 |
three | 2002 | Ohio | 3.6 | NaN |
four | 2001 | Nevada | 2.4 | -1.5 |
five | 2002 | Nevada | 2.9 | -1.7 |
frame2['eastern'] = frame2.state == 'Ohio'
frame2
year | state | pop | debt | eastern | |
---|---|---|---|---|---|
one | 2000 | Ohio | 1.5 | NaN | True |
two | 2001 | Ohio | 1.7 | -1.2 | True |
three | 2002 | Ohio | 3.6 | NaN | True |
four | 2001 | Nevada | 2.4 | -1.5 | False |
five | 2002 | Nevada | 2.9 | -1.7 | False |
del frame2['eastern']
frame2.columns
Index([u'year', u'state', u'pop', u'debt'], dtype=object)
frame2
year | state | pop | debt | |
---|---|---|---|---|
one | 2000 | Ohio | 1.5 | NaN |
two | 2001 | Ohio | 1.7 | -1.2 |
three | 2002 | Ohio | 3.6 | NaN |
four | 2001 | Nevada | 2.4 | -1.5 |
five | 2002 | Nevada | 2.9 | -1.7 |
pop = {'Nevada': {2001: 2.4,
2002: 2.9},
'Ohio': {2000: 1.5,
2001: 1.7,
2002: 3.6}}
pop
{'Nevada': {2001: 2.4, 2002: 2.9}, 'Ohio': {2000: 1.5, 2001: 1.7, 2002: 3.6}}
type(pop)
dict
frame3 = DataFrame(pop)
frame3
Nevada | Ohio | |
---|---|---|
2000 | NaN | 1.5 |
2001 | 2.4 | 1.7 |
2002 | 2.9 | 3.6 |
type(frame3)
pandas.core.frame.DataFrame
frame3['Ohio'][:-1]
2000 1.5 2001 1.7 Name: Ohio, dtype: float64
frame3['Nevada'][:2]
2000 NaN 2001 2.4 Name: Nevada, dtype: float64
frame3.T
2000 | 2001 | 2002 | |
---|---|---|---|
Nevada | NaN | 2.4 | 2.9 |
Ohio | 1.5 | 1.7 | 3.6 |
DataFrame(pop, index=[2001, 2002, 2003])
Nevada | Ohio | |
---|---|---|
2001 | 2.4 | 1.7 |
2002 | 2.9 | 3.6 |
2003 | NaN | NaN |
DataFrame(pop)
Nevada | Ohio | |
---|---|---|
2000 | NaN | 1.5 |
2001 | 2.4 | 1.7 |
2002 | 2.9 | 3.6 |
pdata = {'Ohio': frame3['Ohio'][:-1],
'Nevada': frame3['Nevada'][:2]}
pdata
{'Nevada': 2000 NaN 2001 2.4 Name: Nevada, dtype: float64, 'Ohio': 2000 1.5 2001 1.7 Name: Ohio, dtype: float64}
type(pdata)
dict
DataFrame(pdata)
Nevada | Ohio | |
---|---|---|
2000 | NaN | 1.5 |
2001 | 2.4 | 1.7 |
frame3
Nevada | Ohio | |
---|---|---|
2000 | NaN | 1.5 |
2001 | 2.4 | 1.7 |
2002 | 2.9 | 3.6 |
frame3.index.name = 'year'; frame3.columns.name = 'state'
frame3
state | Nevada | Ohio |
---|---|---|
year | ||
2000 | NaN | 1.5 |
2001 | 2.4 | 1.7 |
2002 | 2.9 | 3.6 |
frame3.index.name = 'year3';
frame3
state | Nevada | Ohio |
---|---|---|
year3 | ||
2000 | NaN | 1.5 |
2001 | 2.4 | 1.7 |
2002 | 2.9 | 3.6 |
frame3.columns.name = 'state3'
frame3
state3 | Nevada | Ohio |
---|---|---|
year3 | ||
2000 | NaN | 1.5 |
2001 | 2.4 | 1.7 |
2002 | 2.9 | 3.6 |
frame3.values
array([[ nan, 1.5], [ 2.4, 1.7], [ 2.9, 3.6]])
frame2.values
array([[2000, 'Ohio', 1.5, nan], [2001, 'Ohio', 1.7, -1.2], [2002, 'Ohio', 3.6, nan], [2001, 'Nevada', 2.4, -1.5], [2002, 'Nevada', 2.9, -1.7]], dtype=object)
형 | 설명 |
---|---|
2차원 ndarray | 데이터를 담고 있는 행렬. 선택적으로 로우와 칼럼의 이름을 전달할 수 있다. |
배열, 리스트, 튜플의 사전 | 사전의 모든 항목은 같은 길이를 가져야 하며, 각 항목의 내용이 DataFrame의 칼럼이 된다. |
NumPy의 구조화 배열 | 배열의 사전과 같은 방식으로 취급된다. |
Series 사전 | Series의 각 값이 컬럼이 된다. 명시적으로 색인을 넘겨주지 않으면 각 Series의 색인이 하나로 합쳐져서 형의 색인이 된다. |
사전의 사전 | 내부에 있는 사전이 칼럼이 된다. 키 값은 'Series의 사전'과 마찬가지로 합쳐져 로우의 색인이 된다. |
사전이나 Series의 리스트 | 리스트의 각 항목이 DataFrame의 로우가 된다. 합쳐진 사전의 키 값이나 Series의 색인이 DataFrame 칼럼의 이름이 된다. |
리스트나 튜플의 리스트 | '2차원 ndarray'와 같은 방식으로 취급된다. |
다른 DataFrame | 색인이 따로 지정되지 않는다면 DataFrame의 색인이 그대로 사용된다. |
NumPy MaskedArray | '2차원 ndarray'와 같은 방식으로 취급되지만 마스크 값은 반환되는 DataFrame에서 NA 값이 된다. |
obj = Series(range(3), index=['a', 'b', 'c'])
index = obj.index
index
Index([u'a', u'b', u'c'], dtype=object)
index[1:]
Index([u'b', u'c'], dtype=object)
# 색인 객체 변경 불가
index[1] = 'd'
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-98-cc123079b99c> in <module>() 1 # 색인 객체 변경 불가 ----> 2 index[1] = 'd' /Library/Python/2.7/site-packages/pandas-0.12.0_307_g3a2fe0b-py2.7-macosx-10.8-intel.egg/pandas/core/base.pyc in _disabled(self, *args, **kwargs) 139 """This method will not function because object is immutable.""" 140 raise TypeError("'%s' does not support mutable operations." % --> 141 self.__class__) 142 143 __setitem__ = __setslice__ = __delitem__ = __delslice__ = _disabled TypeError: '<class 'pandas.core.index.Index'>' does not support mutable operations.
index = pd.Index(np.arange(3))
index
Int64Index([0, 1, 2], dtype=int64)
# index=는 함수의 키워드, 뒤의 index는 변수
obj2 = Series([1.5, -2.5, 0], index=index)
obj2
0 1.5 1 -2.5 2 0.0 dtype: float64
obj2.index is index
True
obj2.index
Int64Index([0, 1, 2], dtype=int64)
index
Int64Index([0, 1, 2], dtype=int64)
클래스 | 설명 |
---|---|
Index | 가장 일반적인 Index 객체이며, 파이썬 객체의 NumPy 배열 형식으로 축의 이름을 표현한다. |
Int64Index | 정수 값을 위한 특수한 Index |
MultiIndex | 단일 축에 여러 단계의 색인을 표현하는 계층적 색인 객체. 튜플의 배열과 유사하다고 볼 수 있다. |
DatetimeIndex | 나노초 타임스탬프를 저장한다(NumPy의 datetime64 dtype으로 표현된다). |
PeriodIndex | 기간 데이터를 위한 특수한 Index |
frame3
state3 | Nevada | Ohio |
---|---|---|
year3 | ||
2000 | NaN | 1.5 |
2001 | 2.4 | 1.7 |
2002 | 2.9 | 3.6 |
'Ohio' in frame3.columns
True
2003 in frame3.index
False
index
Int64Index([0, 1, 2], dtype=int64)
index2 = pd.Index(np.arange(5))
index2
Int64Index([0, 1, 2, 3, 4], dtype=int64)
sum_index = index.append(index2)
index
Int64Index([0, 1, 2], dtype=int64)
sum_index
Int64Index([0, 1, 2, 0, 1, 2, 3, 4], dtype=int64)
메서드 | 설명 |
---|---|
append | 추가적인 Index 객체를 덧붙여 새로운 색인을 반환한다. |
diff | 색인의 차집합을 반환한다. |
intersection | 색인의 교집합을 반환한다. |
union | 색인의 합집합을 반환한다. |
isin | 넘겨받은 값이 해당 색인 위치에 존재하는지 알려주는 불리언 배열을 반환한다. |
delete | i 위치의 색인이 삭제된 새로운 색인을 반환한다. |
drop | 넘겨받은 값이 삭제된 새로운 색인을 반환한다. |
insert | i 위치에 값이 추가된 새로운 색인을 반환한다. |
is_monotonic | 색인이 단조성을 가진다면 True를 반환한다. |
is_unique | 중복되는 색인이 없다면 True를 반환한다. |
unique | 색인에서 중복되는 요소를 제거하고 유일한 값만을 반환한다. |
obj = Series([4.5, 7.2, -5.3, 3.6], index=['d', 'b', 'a', 'c'])
obj
d 4.5 b 7.2 a -5.3 c 3.6 dtype: float64
obj2 = obj.reindex(['a', 'b', 'c', 'd', 'e'])
obj2
a -5.3 b 7.2 c 3.6 d 4.5 e NaN dtype: float64
# fill_value는 데이터 이가 빠진걸 채워넣을 수 있기 때문에 매우 좋은 기능이다.
obj.reindex(['a', 'b', 'c', 'd', 'e'], fill_value=0)
a -5.3 b 7.2 c 3.6 d 4.5 e 0.0 dtype: float64
obj
d 4.5 b 7.2 a -5.3 c 3.6 dtype: float64
obj3 = Series(['blue', 'purple', 'yellow'], index=[0, 2, 3])
obj3
0 blue 2 purple 3 yellow dtype: object
obj3.reindex(range(6), method='ffill')
0 blue 1 blue 2 purple 3 yellow 4 yellow 5 yellow dtype: object
인자 | 설명 |
---|---|
ffill 또는 pad | 앞의 값으로 채워 넣는다. |
bfill 또는 backfill | 뒤의 값으로 채워 넣는다. |
frame = DataFrame(np.arange(9).reshape((3, 3)), index=['a', 'c', 'd'],
columns=['Ohio', 'Texas', 'California'])
frame
Ohio | Texas | California | |
---|---|---|---|
a | 0 | 1 | 2 |
c | 3 | 4 | 5 |
d | 6 | 7 | 8 |
frame2 = frame.reindex(['a', 'b', 'c', 'd'])
frame2
Ohio | Texas | California | |
---|---|---|---|
a | 0 | 1 | 2 |
b | NaN | NaN | NaN |
c | 3 | 4 | 5 |
d | 6 | 7 | 8 |
states = ['Texas', 'Utah', 'California']
frame.reindex(columns=states)
Texas | Utah | California | |
---|---|---|---|
a | 1 | NaN | 2 |
c | 4 | NaN | 5 |
d | 7 | NaN | 8 |
frame
Ohio | Texas | California | |
---|---|---|---|
a | 0 | 1 | 2 |
c | 3 | 4 | 5 |
d | 6 | 7 | 8 |
# 1. 로우를 a,b,c,d로 재색인
# 2. 컬럼을 states로 재색인
# 3. 로우를 ffill로 보간 적용
frame.reindex(index=['a', 'b', 'c', 'd'], method='ffill',
columns=states)
Texas | Utah | California | |
---|---|---|---|
a | 1 | NaN | 2 |
b | 1 | NaN | 2 |
c | 4 | NaN | 5 |
d | 7 | NaN | 8 |
frame.ix[['a', 'b', 'c', 'd'], states]
Texas | Utah | California | |
---|---|---|---|
a | 1 | NaN | 2 |
b | NaN | NaN | NaN |
c | 4 | NaN | 5 |
d | 7 | NaN | 8 |
frame.reindex?
인자 | 설명 |
---|---|
index | 색인으로 사용할 새로운 순서. Index 인스턴스나 다른 순차적인 자료 구조를 사용할 수 있다. 색인은 복사가 이루어지지 않고 그대로 사용된다. |
method | 보간 메서드 |
fill_value | 재색인 과정 중에 새롭게 나타나는 비어있는 데이터를 채우기 위한 값 |
limit | 전/후 보간 시에 사용할 최대 갭 크기 |
level | MultiIndex 단계(level)에 단순 색인을 맞춘다. 그렇지 않으면 MultiIndex의 하위 부분집합에 맞춘다. |
copy | True인 경우 새로운 색인이 이전 색인과 같더라도 데이터를 복사한다. False라면 두 색인이 같은 경우 데이터를 복사하지 않는다. |
obj = Series(np.arange(5.), index=['a', 'b', 'c', 'd', 'e'])
obj
a 0 b 1 c 2 d 3 e 4 dtype: float64
new_obj = obj.drop('c')
new_obj
a 0 b 1 d 3 e 4 dtype: float64
obj.drop(['d', 'c'])
a 0 b 1 e 4 dtype: float64
data = DataFrame(np.arange(16).reshape((4, 4)),
index=['Ohio', 'Colorado', 'Utah', 'New York'],
columns=['one', 'two', 'three', 'four'])
data
one | two | three | four | |
---|---|---|---|---|
Ohio | 0 | 1 | 2 | 3 |
Colorado | 4 | 5 | 6 | 7 |
Utah | 8 | 9 | 10 | 11 |
New York | 12 | 13 | 14 | 15 |
data.drop(['Colorado', 'Ohio'])
one | two | three | four | |
---|---|---|---|---|
Utah | 8 | 9 | 10 | 11 |
New York | 12 | 13 | 14 | 15 |
data.drop('two', axis=1)
one | three | four | |
---|---|---|---|
Ohio | 0 | 2 | 3 |
Colorado | 4 | 6 | 7 |
Utah | 8 | 10 | 11 |
New York | 12 | 14 | 15 |
# list로 drop 할 목록 넘길 수도 있고
# 컬럼인지 로우인지 선택 가능
data.drop(['two', 'four'], axis=1)
one | three | |
---|---|---|
Ohio | 0 | 2 |
Colorado | 4 | 6 |
Utah | 8 | 10 |
New York | 12 | 14 |
obj = Series(np.arange(4.), index=['a', 'b', 'c', 'd'])
#obj = Series([1, 1.1, 2, 3], index=['a', 'b', 'c', 'd'])
obj
a 0 b 1 c 2 d 3 dtype: float64
obj['b']
1.0
obj[1]
1.0
obj[2:4]
c 2 d 3 dtype: float64
obj[['b', 'a', 'd']]
b 1 a 0 d 3 dtype: float64
obj[[1, 3]]
b 1 d 3 dtype: float64
obj[obj < 2]
a 0 b 1 dtype: float64
obj['b':'c']
b 1 c 2 dtype: float64
obj['b':'c'] = 5
obj
a 0 b 5 c 5 d 3 dtype: float64
data = DataFrame(np.arange(16).reshape((4, 4)),
index=['Ohio', 'Colorado', 'Utah', 'New York'],
columns=['one', 'two', 'three', 'four'])
data
one | two | three | four | |
---|---|---|---|---|
Ohio | 0 | 1 | 2 | 3 |
Colorado | 4 | 5 | 6 | 7 |
Utah | 8 | 9 | 10 | 11 |
New York | 12 | 13 | 14 | 15 |
data['two']
Ohio 1 Colorado 5 Utah 9 New York 13 Name: two, dtype: int64
data[['three', 'one']]
three | one | |
---|---|---|
Ohio | 2 | 0 |
Colorado | 6 | 4 |
Utah | 10 | 8 |
New York | 14 | 12 |
data[:2]
one | two | three | four | |
---|---|---|---|---|
Ohio | 0 | 1 | 2 | 3 |
Colorado | 4 | 5 | 6 | 7 |
data[data['three'] > 5]
one | two | three | four | |
---|---|---|---|---|
Colorado | 4 | 5 | 6 | 7 |
Utah | 8 | 9 | 10 | 11 |
New York | 12 | 13 | 14 | 15 |
data
one | two | three | four | |
---|---|---|---|---|
Ohio | 0 | 1 | 2 | 3 |
Colorado | 4 | 5 | 6 | 7 |
Utah | 8 | 9 | 10 | 11 |
New York | 12 | 13 | 14 | 15 |
# 실용성에 기인한 문법
data < 5
one | two | three | four | |
---|---|---|---|---|
Ohio | True | True | True | True |
Colorado | True | False | False | False |
Utah | False | False | False | False |
New York | False | False | False | False |
data[data < 5] = 0
data
one | two | three | four | |
---|---|---|---|---|
Ohio | 0 | 0 | 0 | 0 |
Colorado | 0 | 5 | 6 | 7 |
Utah | 8 | 9 | 10 | 11 |
New York | 12 | 13 | 14 | 15 |
data.ix['Colorado', ['two', 'three']]
two 5 three 6 Name: Colorado, dtype: int64
data.ix[['Colorado', 'Utah'], ['two', 'three']]
two | three | |
---|---|---|
Colorado | 5 | 6 |
Utah | 9 | 10 |
data.ix[['Colorado', 'Utah'], [3, 0, 1]]
four | one | two | |
---|---|---|---|
Colorado | 7 | 0 | 5 |
Utah | 11 | 8 | 9 |
data.ix[2]
one 8 two 9 three 10 four 11 Name: Utah, dtype: int64
data.ix[:'Utah', 'two']
Ohio 0 Colorado 5 Utah 9 Name: two, dtype: int64
data.ix[data.three > 5, :3]
one | two | three | |
---|---|---|---|
Colorado | 0 | 5 | 6 |
Utah | 8 | 9 | 10 |
New York | 12 | 13 | 14 |
# ,를 기준으로 앞은 행. 뒤로는 열을 나타낸다.
data.ix[data.three > 5, :2]
one | two | |
---|---|---|
Colorado | 0 | 5 |
Utah | 8 | 9 |
New York | 12 | 13 |
방식 | 설명 |
---|---|
obj[val] | DataFrame에서 하나의 칼럼 또는 여러 칼럼을 선택한다. 편의를 위해 불리언 배열, 슬라이스, 불리언 DataFrame(어떤 기준에 근거해서 값을 대입해야 할 때)을 사용할 수 있다. |
obj.ix[val] | DataFrame에서 로우의 부분집합을 선택한다. |
obj.ix[:, val] | DataFrame에서 칼럼의 부분집합을 선택한다. |
obj.ix[val1, val2] | DataFrame에서 로우와 칼럼의 부분집합을 선택한다. |
reindex 메서드 | 하나 이상의 축을 새로운 색인으로 맞춘다. |
xs 메서드 | 라벨 이름으로 단일 로우나 칼럼을 Series 형식으로 선택한다. |
icol, irow 메서드 | 각각 정수 색인으로 단일 로우나 칼럼을 Series 형식으로 선택한다. |
get_value, set_value 메서드 | 로우와 칼럼 이름으로 DataFrame의 값을 선택한다. |
s1 = Series([7.3, -2.5, 3.4, 1.5], index=['a', 'c', 'd', 'e'])
s2 = Series([-2.1, 3.6, -1.5, 4, 3.1], index=['a', 'c', 'e', 'f', 'g'])
s1
a 7.3 c -2.5 d 3.4 e 1.5 dtype: float64
s2
a -2.1 c 3.6 e -1.5 f 4.0 g 3.1 dtype: float64
s1 + s2
a 5.2 c 1.1 d NaN e 0.0 f NaN g NaN dtype: float64
list('bcd')
['b', 'c', 'd']
df1 = DataFrame(np.arange(9.).reshape((3, 3)), columns=list('bcd'),
index=['Ohio', 'Texas', 'Colorado'])
df2 = DataFrame(np.arange(12.).reshape((4, 3)), columns=list('bde'),
index=['Utah', 'Ohio', 'Texas', 'Oregon'])
df1
b | c | d | |
---|---|---|---|
Ohio | 0 | 1 | 2 |
Texas | 3 | 4 | 5 |
Colorado | 6 | 7 | 8 |
df2
b | d | e | |
---|---|---|---|
Utah | 0 | 1 | 2 |
Ohio | 3 | 4 | 5 |
Texas | 6 | 7 | 8 |
Oregon | 9 | 10 | 11 |
df1 + df2
b | c | d | e | |
---|---|---|---|---|
Colorado | NaN | NaN | NaN | NaN |
Ohio | 3 | NaN | 6 | NaN |
Oregon | NaN | NaN | NaN | NaN |
Texas | 9 | NaN | 12 | NaN |
Utah | NaN | NaN | NaN | NaN |
df1 = DataFrame(np.arange(12.).reshape((3, 4)), columns=list('abcd'))
df2 = DataFrame(np.arange(20.).reshape((4, 5)), columns=list('abcde'))
df1
a | b | c | d | |
---|---|---|---|---|
0 | 0 | 1 | 2 | 3 |
1 | 4 | 5 | 6 | 7 |
2 | 8 | 9 | 10 | 11 |
df2
a | b | c | d | e | |
---|---|---|---|---|---|
0 | 0 | 1 | 2 | 3 | 4 |
1 | 5 | 6 | 7 | 8 | 9 |
2 | 10 | 11 | 12 | 13 | 14 |
3 | 15 | 16 | 17 | 18 | 19 |
df1 + df2
a | b | c | d | e | |
---|---|---|---|---|---|
0 | 0 | 2 | 4 | 6 | NaN |
1 | 9 | 11 | 13 | 15 | NaN |
2 | 18 | 20 | 22 | 24 | NaN |
3 | NaN | NaN | NaN | NaN | NaN |
# fill value=0인데 왜 4,9,14,19로 채워지지??
df1.add(df2, fill_value=0)
a | b | c | d | e | |
---|---|---|---|---|---|
0 | 0 | 2 | 4 | 6 | 4 |
1 | 9 | 11 | 13 | 15 | 9 |
2 | 18 | 20 | 22 | 24 | 14 |
3 | 15 | 16 | 17 | 18 | 19 |
df1.add(df2)
a | b | c | d | e | |
---|---|---|---|---|---|
0 | 0 | 2 | 4 | 6 | NaN |
1 | 9 | 11 | 13 | 15 | NaN |
2 | 18 | 20 | 22 | 24 | NaN |
3 | NaN | NaN | NaN | NaN | NaN |
# 아하! 원래의 df2 값에 fill_value의 값을 더하는군!!
df1.add(df2, fill_value=1)
a | b | c | d | e | |
---|---|---|---|---|---|
0 | 0 | 2 | 4 | 6 | 5 |
1 | 9 | 11 | 13 | 15 | 10 |
2 | 18 | 20 | 22 | 24 | 15 |
3 | 16 | 17 | 18 | 19 | 20 |
df1.add(df2, fill_value=2)
a | b | c | d | e | |
---|---|---|---|---|---|
0 | 0 | 2 | 4 | 6 | 6 |
1 | 9 | 11 | 13 | 15 | 11 |
2 | 18 | 20 | 22 | 24 | 16 |
3 | 17 | 18 | 19 | 20 | 21 |
# 원래 내가 생각했던 함수의 역할이었지만 잘못된 생각인듯.
df1.reindex(columns=df2.columns, fill_value=0)
a | b | c | d | e | |
---|---|---|---|---|---|
0 | 0 | 1 | 2 | 3 | 0 |
1 | 4 | 5 | 6 | 7 | 0 |
2 | 8 | 9 | 10 | 11 | 0 |
메서드 | 설명 |
---|---|
add | 덧셈(+)을 위한 메서드 |
sub | 뺄셈(-)을 위한 메서드 |
div | 나눗셈(/)을 위한 메서드 |
mul | 곱셈(*)을 위한 메서드 |
arr = np.arange(12.).reshape((3, 4))
arr
array([[ 0., 1., 2., 3.], [ 4., 5., 6., 7.], [ 8., 9., 10., 11.]])
arr[0]
array([ 0., 1., 2., 3.])
arr - arr[0]
array([[ 0., 0., 0., 0.], [ 4., 4., 4., 4.], [ 8., 8., 8., 8.]])
arr - arr[1]
array([[-4., -4., -4., -4.], [ 0., 0., 0., 0.], [ 4., 4., 4., 4.]])
frame = DataFrame(np.arange(12.).reshape((4, 3)), columns=list('bde'),
index=['Utah', 'Ohio', 'Texas', 'Oregon'])
series = frame.ix[0]
frame
b | d | e | |
---|---|---|---|
Utah | 0 | 1 | 2 |
Ohio | 3 | 4 | 5 |
Texas | 6 | 7 | 8 |
Oregon | 9 | 10 | 11 |
series
b 0 d 1 e 2 Name: Utah, dtype: float64
frame - series
b | d | e | |
---|---|---|---|
Utah | 0 | 0 | 0 |
Ohio | 3 | 3 | 3 |
Texas | 6 | 6 | 6 |
Oregon | 9 | 9 | 9 |
series2 = Series(range(3), index=['b', 'e', 'f'])
frame + series2
b | d | e | f | |
---|---|---|---|---|
Utah | 0 | NaN | 3 | NaN |
Ohio | 3 | NaN | 6 | NaN |
Texas | 6 | NaN | 9 | NaN |
Oregon | 9 | NaN | 12 | NaN |
series2, type(series2)
(b 0 e 1 f 2 dtype: int64, pandas.core.series.Series)
frame
b | d | e | |
---|---|---|---|
Utah | 0 | 1 | 2 |
Ohio | 3 | 4 | 5 |
Texas | 6 | 7 | 8 |
Oregon | 9 | 10 | 11 |
series3 = frame['d']
frame
b | d | e | |
---|---|---|---|
Utah | 0 | 1 | 2 |
Ohio | 3 | 4 | 5 |
Texas | 6 | 7 | 8 |
Oregon | 9 | 10 | 11 |
series3
Utah 1 Ohio 4 Texas 7 Oregon 10 Name: d, dtype: float64
# 인자로 넘기는 axis 값은 연산을 적용할 축 번호
# axis=0은 DataFrame의 로우를 따라 연산을 수행
frame.sub(series3, axis=0)
b | d | e | |
---|---|---|---|
Utah | -1 | 0 | 1 |
Ohio | -1 | 0 | 1 |
Texas | -1 | 0 | 1 |
Oregon | -1 | 0 | 1 |
frame = DataFrame(np.random.randn(4, 3), columns=list('bde'),
index=['Utah', 'Ohio', 'Texas', 'Oregon'])
np.abs(frame)
b | d | e | |
---|---|---|---|
Utah | 1.908651 | 0.943723 | 0.250739 |
Ohio | 1.207835 | 1.298138 | 0.690437 |
Texas | 1.227648 | 0.427507 | 0.235306 |
Oregon | 0.430131 | 0.873474 | 0.594105 |
frame
b | d | e | |
---|---|---|---|
Utah | -1.908651 | 0.943723 | 0.250739 |
Ohio | 1.207835 | -1.298138 | -0.690437 |
Texas | -1.227648 | -0.427507 | -0.235306 |
Oregon | -0.430131 | -0.873474 | 0.594105 |
f = lambda x: x.max() - x.min()
# Applies function along input axis of DataFrame.
# Objects passed to functions are Series objects having index either the DataFrame's index(axis=0)
# or the columns (axis=1).
# Return type depends on whether passed function aggregates
frame.apply?
# 1. b 컬럼 기준으로 row 값들을 대상으로
# 2. max값과 min값을 구한다.
# 3. max - min을 한 후 결과값 돌려준다.
# 1.107814 - (-0.026992) = 1.134806
frame.apply(f)
b 3.116486 d 2.241861 e 1.284542 dtype: float64
# 0.328717 - 0.121724 = 0.206992
frame.apply(f, axis=1)
Utah 2.852374 Ohio 2.505973 Texas 0.992342 Oregon 1.467579 dtype: float64
frame
b | d | e | |
---|---|---|---|
Utah | -1.908651 | 0.943723 | 0.250739 |
Ohio | 1.207835 | -1.298138 | -0.690437 |
Texas | -1.227648 | -0.427507 | -0.235306 |
Oregon | -0.430131 | -0.873474 | 0.594105 |
def f(x):
return Series([x.min(), x.max()], index=['min', 'max'])
frame.apply(f)
b | d | e | |
---|---|---|---|
min | -1.908651 | -1.298138 | -0.690437 |
max | 1.207835 | 0.943723 | 0.594105 |
type(frame.apply(f))
pandas.core.frame.DataFrame
format = lambda x: '%.2f' % x
frame.applymap(format)
b | d | e | |
---|---|---|---|
Utah | -1.91 | 0.94 | 0.25 |
Ohio | 1.21 | -1.30 | -0.69 |
Texas | -1.23 | -0.43 | -0.24 |
Oregon | -0.43 | -0.87 | 0.59 |
frame['e'].map(format)
Utah 0.25 Ohio -0.69 Texas -0.24 Oregon 0.59 Name: e, dtype: object
# 원래 float값인데 위에서 string 형식으로 변경했기 때문에 dtype이 object가 됐다.
frame['e']
Utah 0.250739 Ohio -0.690437 Texas -0.235306 Oregon 0.594105 Name: e, dtype: float64
obj = Series(range(4), index=['d', 'a', 'b', 'c'])
obj.sort_index()
a 1 b 2 c 3 d 0 dtype: int64
frame = DataFrame(np.arange(8).reshape((2, 4)), index=['three', 'one'],
columns=['d', 'a', 'b', 'c'])
frame
d | a | b | c | |
---|---|---|---|---|
three | 0 | 1 | 2 | 3 |
one | 4 | 5 | 6 | 7 |
frame.sort_index()
d | a | b | c | |
---|---|---|---|---|
one | 4 | 5 | 6 | 7 |
three | 0 | 1 | 2 | 3 |
frame.sort_index(axis=1)
a | b | c | d | |
---|---|---|---|---|
three | 1 | 2 | 3 | 0 |
one | 5 | 6 | 7 | 4 |
frame.sort_index(axis=1, ascending=False)
d | c | b | a | |
---|---|---|---|---|
three | 0 | 3 | 2 | 1 |
one | 4 | 7 | 6 | 5 |
obj = Series([4, 7, -3, 2])
# 값에 따라 정렬
obj.order()
2 -3 3 2 0 4 1 7 dtype: int64
obj = Series([4, np.nan, 7, np.nan, -3, 2])
obj.order()
4 -3 5 2 0 4 2 7 1 NaN 3 NaN dtype: float64
4 -3 5 2 0 4 2 7 1 NaN 3 NaN
frame = DataFrame({'b': [4, 7, -3, 2],
'a': [0, 1, 0, 1]})
frame
a | b | |
---|---|---|
0 | 0 | 4 |
1 | 1 | 7 |
2 | 0 | -3 |
3 | 1 | 2 |
frame.sort_index(by='b')
a | b | |
---|---|---|
2 | 0 | -3 |
3 | 1 | 2 |
0 | 0 | 4 |
1 | 1 | 7 |
frame.sort_index(by=['a', 'b'])
a | b | |
---|---|---|
2 | 0 | -3 |
0 | 0 | 4 |
3 | 1 | 2 |
1 | 1 | 7 |
obj = Series([7, -5, 7, 4, 2, 0, 4])
obj.rank()
0 6.5 1 1.0 2 6.5 3 4.5 4 3.0 5 2.0 6 4.5 dtype: float64
# 데이터 상에서 나타나는 순서에 따라 순위
obj.rank(method='first')
0 6 1 1 2 7 3 4 4 3 5 2 6 5 dtype: float64
# 내림차순으로 순위
obj.rank(ascending=False, method='max')
0 2 1 7 2 2 3 4 4 5 5 6 6 4 dtype: float64
frame = DataFrame({'b': [4.3, 7, -3, 2],
'a':[0, 1, 0, 1],
'c':[-2, 5, 8, -2.5]})
frame
a | b | c | |
---|---|---|---|
0 | 0 | 4.3 | -2.0 |
1 | 1 | 7.0 | 5.0 |
2 | 0 | -3.0 | 8.0 |
3 | 1 | 2.0 | -2.5 |
# 0, 4.3, -2.0 에서 rank 정함
frame.rank(axis=1)
a | b | c | |
---|---|---|---|
0 | 2 | 3 | 1 |
1 | 1 | 3 | 2 |
2 | 2 | 1 | 3 |
3 | 2 | 3 | 1 |
# 0, 1, 0, 1 에서 rank 정함
frame.rank()
a | b | c | |
---|---|---|---|
0 | 1.5 | 3 | 2 |
1 | 3.5 | 4 | 3 |
2 | 1.5 | 1 | 4 |
3 | 3.5 | 2 | 1 |
메서드 | 설명 |
---|---|
'average' | 기본 값: 같은 값을 가지는 항목의 평균 값을 순위로 삼는다. |
'min' | 같은 값을 가지는 그룹을 낮은 순위로 매긴다. |
'max' | 같은 값을 가지는 그룹을 높은 순위로 매긴다. |
'first' | 데이터 내에서 위치에 따라 순위를 매긴다. |
obj = Series(range(5), index=['a', 'a', 'b', 'b', 'c'])
obj
a 0 a 1 b 2 b 3 c 4 dtype: int64
obj.index.is_unique
False
obj['a']
array([0, 1])
# 책에서는 하나의 Series 객체 반환 한다고 했느데 numpy.ndarray네?!
type(obj['a'])
numpy.ndarray
obj['c']
4
df = DataFrame(np.random.randn(4, 3), index=['a', 'a', 'b', 'b'])
df
0 | 1 | 2 | |
---|---|---|---|
a | 0.284454 | 1.189586 | 0.394071 |
a | 0.754665 | -1.483700 | 1.019817 |
b | 0.246102 | -1.525030 | -0.418855 |
b | 0.575552 | 0.920265 | -0.012548 |
df.ix['b']
0 | 1 | 2 | |
---|---|---|---|
b | 0.246102 | -1.525030 | -0.418855 |
b | 0.575552 | 0.920265 | -0.012548 |
df = DataFrame([[1.4, np.nan], [7.1, -4.5],
[np.nan, np.nan], [0.75, -1.3]],
index=['a', 'b', 'c', 'd'],
columns=['one', 'two'])
df
one | two | |
---|---|---|
a | 1.40 | NaN |
b | 7.10 | -4.5 |
c | NaN | NaN |
d | 0.75 | -1.3 |
# NaN은 계산 안됨
df.sum()
one 9.25 two -5.80 dtype: float64
# 각 로우의 합 반환
df.sum(axis=1)
a 1.40 b 2.60 c NaN d -0.55 dtype: float64
df.mean(axis=1, skipna=False)
a NaN b 1.300 c NaN d -0.275 dtype: float64
옵션 | 설명 |
---|---|
axis | 연산을 수행할 축. DataFrame에서 0은 로우고 1은 칼럼이다. |
skipna | 누락된 값을 제외할 것인지 정하는 옵션. 기본값은 True다. |
level | 계산하려는 축이 계층적 색인(다중 색인)이라면 레벨에 따라 묶어서 계산한다. |
# Return index of first occurrence of maximum over requested axis.
# NA/null values are excluded.
df.idxmax?
df.idxmax()
one b two d dtype: object
# cumulative. 아래로 갈수록 누산 됨
df.cumsum()
one | two | |
---|---|---|
a | 1.40 | NaN |
b | 8.50 | -4.5 |
c | NaN | NaN |
d | 9.25 | -5.8 |
df
one | two | |
---|---|---|
a | 1.40 | NaN |
b | 7.10 | -4.5 |
c | NaN | NaN |
d | 0.75 | -1.3 |
df.describe()
one | two | |
---|---|---|
count | 3.000000 | 2.000000 |
mean | 3.083333 | -2.900000 |
std | 3.493685 | 2.262742 |
min | 0.750000 | -4.500000 |
25% | 1.075000 | -3.700000 |
50% | 1.400000 | -2.900000 |
75% | 4.250000 | -2.100000 |
max | 7.100000 | -1.300000 |
obj = Series(['a', 'a', 'b', 'c'] * 4)
obj.describe()
count 16 unique 3 top a freq 8 dtype: object
obj
0 a 1 a 2 b 3 c 4 a 5 a 6 b 7 c 8 a 9 a 10 b 11 c 12 a 13 a 14 b 15 c dtype: object
메서드 | 설명 |
---|---|
count | NA 값을 제외한 값의 수를 반환한다. |
describe | Series나 DataFrame의 각 칼럼에 대한 요약통계를 계산한다. |
min, max | 최소, 최대값을 계산한다. |
argmin, argmax | 각각 최소, 최대값을 갖고 있는 색인의 위치(정수)를 반환한다. |
idxmin, idxmax | 각각 최소, 최대 값을 갖고 있는 색인의 값을 반환한다. |
quantile | 0부터 1까지의 분위수를 계산한다. |
sum | 합을 계산한다. |
mean | 평균을 계산한다. |
median | 중간 값(50% 분위)을 반환한다. |
mad | 평균 값에서 절대 평균편차를 구한다. |
var | 표본 분산의 값을 구한다. |
std | 표본 정규 분산의 값을 구한다. |
skew | 표본 비대칭도(3차 적률)의 값을 구한다. |
cumsum | 누적 합을 구한다. |
cummin, cummax | 각각 누적 최소 값과 누적 최대 값을 계산한다. |
cumprod | 누적 곱을 구한다. |
diff | 1차 산술 차를 구한다(시게열 데이터 처리시 유용하다). |
pct_change | 퍼센트 변화율을 계산한다. |
import pandas.io.data as web
all_data = {}
# GOOG -> GOOGL
for ticker in ['AAPL', 'IBM', 'MSFT', 'GOOGL']:
all_data[ticker] = web.get_data_yahoo(ticker, '1/1/2000', '5/12/2014')
price = DataFrame({tic: data['Adj Close']
for tic, data in all_data.iteritems()})
volume = DataFrame({tic: data['Volume']
for tic, data in all_data.iteritems()})
# Percent change over given number of periods
returns = price.pct_change()
returns.tail()
AAPL | GOOGL | IBM | MSFT | |
---|---|---|---|---|
Date | ||||
2014-05-06 | -0.010893 | -0.023836 | -0.006416 | -0.009195 |
2014-05-07 | -0.003502 | -0.008745 | 0.001958 | 0.009023 |
2014-05-08 | -0.001783 | 0.004189 | -0.002060 | 0.005621 |
2014-05-09 | -0.004167 | 0.012400 | 0.006193 | -0.002541 |
2014-05-12 | 0.012450 | 0.022426 | 0.013100 | 0.010953 |
price
<class 'pandas.core.frame.DataFrame'> DatetimeIndex: 3611 entries, 2000-01-03 00:00:00 to 2014-05-12 00:00:00 Data columns (total 4 columns): AAPL 3611 non-null values GOOGL 2449 non-null values IBM 3611 non-null values MSFT 3611 non-null values dtypes: float64(4)
volume
<class 'pandas.core.frame.DataFrame'> DatetimeIndex: 3611 entries, 2000-01-03 00:00:00 to 2014-05-12 00:00:00 Data columns (total 4 columns): AAPL 3611 non-null values GOOGL 2449 non-null values IBM 3611 non-null values MSFT 3611 non-null values dtypes: float64(1), int64(3)
returns.head()
AAPL | GOOGL | IBM | MSFT | |
---|---|---|---|---|
Date | ||||
2000-01-03 | NaN | NaN | NaN | NaN |
2000-01-04 | -0.084486 | NaN | -0.033944 | -0.033814 |
2000-01-05 | 0.014700 | NaN | 0.035137 | 0.010524 |
2000-01-06 | -0.086519 | NaN | -0.017284 | -0.033422 |
2000-01-07 | 0.047577 | NaN | -0.004344 | 0.013029 |
returns.MSFT
Date 2000-01-03 NaN 2000-01-04 -0.033814 2000-01-05 0.010524 2000-01-06 -0.033422 2000-01-07 0.013029 2000-01-10 0.007420 2000-01-11 -0.025780 2000-01-12 -0.032510 2000-01-13 0.019015 2000-01-14 0.041155 2000-01-18 0.027253 2000-01-19 -0.072180 2000-01-20 -0.009274 2000-01-21 -0.021321 2000-01-24 -0.023911 ... 2014-04-22 0.001261 2014-04-23 -0.007555 2014-04-24 0.004314 2014-04-25 0.001263 2014-04-28 0.023972 2014-04-29 -0.008625 2014-04-30 -0.002734 2014-05-01 -0.009970 2014-05-02 -0.007805 2014-05-05 -0.006597 2014-05-06 -0.009195 2014-05-07 0.009023 2014-05-08 0.005621 2014-05-09 -0.002541 2014-05-12 0.010953 Name: MSFT, Length: 3611
returns.MSFT.corr(returns.IBM)
0.4984519862052475
returns.MSFT.cov(returns.IBM)
0.00017666857300561051
returns.corr()
AAPL | GOOGL | IBM | MSFT | |
---|---|---|---|---|
AAPL | 1.000000 | 0.456068 | 0.406758 | 0.414118 |
GOOGL | 0.456068 | 1.000000 | 0.397134 | 0.435762 |
IBM | 0.406758 | 0.397134 | 1.000000 | 0.498452 |
MSFT | 0.414118 | 0.435762 | 0.498452 | 1.000000 |
returns.cov()
AAPL | GOOGL | IBM | MSFT | |
---|---|---|---|---|
AAPL | 0.000807 | 0.000220 | 0.000199 | 0.000241 |
GOOGL | 0.000220 | 0.000438 | 0.000114 | 0.000156 |
IBM | 0.000199 | 0.000114 | 0.000298 | 0.000177 |
MSFT | 0.000241 | 0.000156 | 0.000177 | 0.000421 |
#Compute pairwise correlation of columns, excluding NA/null values
returns.corr?
# Compute pairwise covariance of columns, excluding NA/null values
returns.cov?
returns.corrwith(returns.IBM)
AAPL 0.406758 GOOGL 0.397134 IBM 1.000000 MSFT 0.498452 dtype: float64
returns.corrwith(volume)
AAPL -0.062011 GOOGL 0.053223 IBM -0.032225 MSFT -0.034290 dtype: float64
obj = Series(['c', 'a', 'd', 'a', 'a', 'b', 'b', 'c', 'c'])
obj
0 c 1 a 2 d 3 a 4 a 5 b 6 b 7 c 8 c dtype: object
uniques = obj.unique()
uniques
array(['c', 'a', 'd', 'b'], dtype=object)
obj.value_counts()
c 3 a 3 b 2 d 1 dtype: int64
obj.value_counts(sort=False, ascending=False)
a 3 c 3 b 2 d 1 dtype: int64
obj.values
array(['c', 'a', 'd', 'a', 'a', 'b', 'b', 'c', 'c'], dtype=object)
pd.value_counts(obj.values)
c 3 a 3 b 2 d 1 dtype: int64
pd.value_counts(obj.values, sort=False)
a 3 c 3 b 2 d 1 dtype: int64
# sort가 True인데 왜 c, a 순으로 나오지..? 이해 불가..
# 책이랑 반대라서 개념 혼란
pd.value_counts(obj.values, sort=True)
c 3 a 3 b 2 d 1 dtype: int64
obj2 = Series(['c', 'c', 'd', 'd', 'c', 'd'])
pd.value_counts(obj2.values, sort=True)
c 3 d 3 dtype: int64
obj2 = Series(['d', 'c', 'c', 'd', 'c', 'd'])
pd.value_counts(obj2.values, sort=False)
d 3 c 3 dtype: int64
mask = obj.isin(['b', 'c'])
mask
0 True 1 False 2 False 3 False 4 False 5 True 6 True 7 True 8 True dtype: bool
obj[mask]
0 c 5 b 6 b 7 c 8 c dtype: object
obj[True]
--------------------------------------------------------------------------- KeyError Traceback (most recent call last) <ipython-input-302-8d9c188ba330> in <module>() ----> 1 obj[True] /Library/Python/2.7/site-packages/pandas-0.12.0_307_g3a2fe0b-py2.7-macosx-10.8-intel.egg/pandas/core/series.pyc in __getitem__(self, key) 903 def __getitem__(self, key): 904 try: --> 905 return self.index.get_value(self, key) 906 except InvalidIndexError: 907 pass /Library/Python/2.7/site-packages/pandas-0.12.0_307_g3a2fe0b-py2.7-macosx-10.8-intel.egg/pandas/core/index.pyc in get_value(self, series, key) 834 k = _values_from_object(key) 835 try: --> 836 return self._engine.get_value(s, k) 837 except KeyError as e1: 838 if len(self) > 0 and self.inferred_type == 'integer': /Library/Python/2.7/site-packages/pandas-0.12.0_307_g3a2fe0b-py2.7-macosx-10.8-intel.egg/pandas/index.so in pandas.index.IndexEngine.get_value (pandas/index.c:2658)() /Library/Python/2.7/site-packages/pandas-0.12.0_307_g3a2fe0b-py2.7-macosx-10.8-intel.egg/pandas/index.so in pandas.index.IndexEngine.get_value (pandas/index.c:2473)() /Library/Python/2.7/site-packages/pandas-0.12.0_307_g3a2fe0b-py2.7-macosx-10.8-intel.egg/pandas/index.so in pandas.index.IndexEngine.get_loc (pandas/index.c:3177)() /Library/Python/2.7/site-packages/pandas-0.12.0_307_g3a2fe0b-py2.7-macosx-10.8-intel.egg/pandas/index.so in pandas.index.Int64Engine._check_type (pandas/index.c:6304)() KeyError: True
메서드 | 설명 |
---|---|
isin | Series의 각 원소가 넘겨받은 연속된 값에 속하는지를 나타내는 불리언 배열을 반환한다. |
unique | Series에서 중복되는 값을 제거하고 유일한 값만 포함하는 배열을 반환한다. 결과는 Series에서 발견된 순서대로 반환된다. |
value_counts | Series에서 유일 값에 대한 색인 값과 도수를 계산한다. 결과는 도수 값의 내림차순으로 정렬된다. |
data = DataFrame({'Qu1': [1, 3, 4, 3, 4],
'Qu2': [2, 3, 1, 2, 3],
'Qu3': [1, 5, 2, 4, 4]})
data
Qu1 | Qu2 | Qu3 | |
---|---|---|---|
0 | 1 | 2 | 1 |
1 | 3 | 3 | 5 |
2 | 4 | 1 | 2 |
3 | 3 | 2 | 4 |
4 | 4 | 3 | 4 |
result = data.apply(pd.value_counts)
result
Qu1 | Qu2 | Qu3 | |
---|---|---|---|
1 | 1 | 1 | 1 |
2 | NaN | 2 | 1 |
3 | 2 | 2 | NaN |
4 | 2 | NaN | 2 |
5 | NaN | NaN | 1 |
result = data.apply(pd.value_counts).fillna(0)
result
Qu1 | Qu2 | Qu3 | |
---|---|---|---|
1 | 1 | 1 | 1 |
2 | 0 | 2 | 1 |
3 | 2 | 2 | 0 |
4 | 2 | 0 | 2 |
5 | 0 | 0 | 1 |
string_data = Series(['aardvark', 'artichoke', np.nan, 'avocado'])
string_data
0 aardvark 1 artichoke 2 NaN 3 avocado dtype: object
string_data.isnull()
0 False 1 False 2 True 3 False dtype: bool
# Python 내장 None 또한 null 취급
string_data[0] = None
string_data.isnull()
0 True 1 False 2 True 3 False dtype: bool
인자 | 설명 |
---|---|
dropna | 누락된 데이터가 있는 축(로우, 칼럼)을 제외시킨다. 어느 정도의 누락 데이터까지 용인할 것인지 지정할 수 있다. |
fillna | 누락된 데이터를 대신할 값을 채우거나 'ffill' 또는 'bfill' 같은 보간 메서드를 적용한다. |
isnull | 누락되거나 NA인 값을 알려주는 불리언 값이 저장된, 같은 형의 객체를 반환한다. |
notnull | isnull과 반대되는 메서드다. |
from numpy import nan as NA
data = Series([1, NA, 3.5, NA, 7])
data.dropna()
0 1.0 2 3.5 4 7.0 dtype: float64
data[data.notnull()]
0 1.0 2 3.5 4 7.0 dtype: float64
data = DataFrame([[1., 6.5, 3.], [1., NA, NA],
[NA, NA, NA], [NA, 6.5, 3]])
cleaned = data.dropna()
data
0 | 1 | 2 | |
---|---|---|---|
0 | 1 | 6.5 | 3 |
1 | 1 | NaN | NaN |
2 | NaN | NaN | NaN |
3 | NaN | 6.5 | 3 |
# NA가 하나라도 있으면 기본적으로 제외해서 보여줌
cleaned
0 | 1 | 2 | |
---|---|---|---|
0 | 1 | 6.5 | 3 |
data.dropna(how='all')
0 | 1 | 2 | |
---|---|---|---|
0 | 1 | 6.5 | 3 |
1 | 1 | NaN | NaN |
3 | NaN | 6.5 | 3 |
data.dropna?
# Failed. how에 들어가는 인자값이 어떤 것들이 있는지 어떻게 알지? -> any, all 2개만 있네.
# 명령어 뒤에 ? 붙이면 설명 나옴
data.dropna(how='one')
--------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-324-649caaa8dea3> in <module>() 1 # Failed. how에 들어가는 인자값이 어떤 것들이 있는지 어떻게 알지? -> any, all 2개만 있네. 2 # 명령어 뒤에 ? 붙이면 설명 나옴 ----> 3 data.dropna(how='one') /Library/Python/2.7/site-packages/pandas-0.12.0_307_g3a2fe0b-py2.7-macosx-10.8-intel.egg/pandas/core/frame.pyc in dropna(self, axis, how, thresh, subset) 2616 else: 2617 if how is not None: -> 2618 raise ValueError('do not recognize %s' % how) 2619 else: 2620 raise ValueError('must specify how or thresh') ValueError: do not recognize one
data[4] = NA
data
0 | 1 | 2 | 4 | |
---|---|---|---|---|
0 | 1 | 6.5 | 3 | NaN |
1 | 1 | NaN | NaN | NaN |
2 | NaN | NaN | NaN | NaN |
3 | NaN | 6.5 | 3 | NaN |
data
0 | 1 | 2 | 4 | |
---|---|---|---|---|
0 | 1 | 6.5 | 3 | NaN |
1 | 1 | NaN | NaN | NaN |
2 | NaN | NaN | NaN | NaN |
3 | NaN | 6.5 | 3 | NaN |
# axis=0 is row.
data.dropna(axis=0, how='all')
0 | 1 | 2 | 4 | |
---|---|---|---|---|
0 | 1 | 6.5 | 3 | NaN |
1 | 1 | NaN | NaN | NaN |
3 | NaN | 6.5 | 3 | NaN |
data.dropna(axis=1, how='all')
0 | 1 | 2 | |
---|---|---|---|
0 | 1 | 6.5 | 3 |
1 | 1 | NaN | NaN |
2 | NaN | NaN | NaN |
3 | NaN | 6.5 | 3 |
data.dropna(axis=1)
Int64Index([0, 1, 2, 3], dtype=int64) | Empty DataFrame |
df = DataFrame(np.random.randn(7, 3))
df
0 | 1 | 2 | |
---|---|---|---|
0 | 1.105290 | 0.865731 | -0.336369 |
1 | -0.955932 | 0.748322 | 1.036024 |
2 | -1.679063 | 0.568578 | 0.380878 |
3 | -1.082717 | 0.511421 | -0.244171 |
4 | -0.014430 | -2.473332 | -1.772991 |
5 | -0.384078 | 0.365353 | -0.252302 |
6 | -0.016087 | -0.632474 | -0.628749 |
# 여기에서는 :4라고 했으면 정상적으로는 0,1,2,3만 해당이 되야 되는데 4까지 적용이 되네???
# ix는 slicing 마지막 문자까지 포함 됨
df.ix[:4, 1] = NA; df.ix[:2, 2] = NA
df
0 | 1 | 2 | |
---|---|---|---|
0 | 1.105290 | NaN | NaN |
1 | -0.955932 | NaN | NaN |
2 | -1.679063 | NaN | NaN |
3 | -1.082717 | NaN | -0.244171 |
4 | -0.014430 | NaN | -1.772991 |
5 | -0.384078 | 0.365353 | -0.252302 |
6 | -0.016087 | -0.632474 | -0.628749 |
df.dropna(thresh=3)
0 | 1 | 2 | |
---|---|---|---|
5 | -0.384078 | 0.365353 | -0.252302 |
6 | -0.016087 | -0.632474 | -0.628749 |
df.dropna(thresh=2)
0 | 1 | 2 | |
---|---|---|---|
3 | -1.082717 | NaN | -0.244171 |
4 | -0.014430 | NaN | -1.772991 |
5 | -0.384078 | 0.365353 | -0.252302 |
6 | -0.016087 | -0.632474 | -0.628749 |
df.fillna(0)
0 | 1 | 2 | |
---|---|---|---|
0 | 1.105290 | 0.000000 | 0.000000 |
1 | -0.955932 | 0.000000 | 0.000000 |
2 | -1.679063 | 0.000000 | 0.000000 |
3 | -1.082717 | 0.000000 | -0.244171 |
4 | -0.014430 | 0.000000 | -1.772991 |
5 | -0.384078 | 0.365353 | -0.252302 |
6 | -0.016087 | -0.632474 | -0.628749 |
# dictionary 형식으로 받았는데 앞의 key가 컬럼을 나타냄
df.fillna({1: 0.5, 3: -1})
0 | 1 | 2 | |
---|---|---|---|
0 | 1.105290 | 0.500000 | NaN |
1 | -0.955932 | 0.500000 | NaN |
2 | -1.679063 | 0.500000 | NaN |
3 | -1.082717 | 0.500000 | -0.244171 |
4 | -0.014430 | 0.500000 | -1.772991 |
5 | -0.384078 | 0.365353 | -0.252302 |
6 | -0.016087 | -0.632474 | -0.628749 |
df.fillna({2:0.5, 1:-1})
0 | 1 | 2 | |
---|---|---|---|
0 | 1.105290 | -1.000000 | 0.500000 |
1 | -0.955932 | -1.000000 | 0.500000 |
2 | -1.679063 | -1.000000 | 0.500000 |
3 | -1.082717 | -1.000000 | -0.244171 |
4 | -0.014430 | -1.000000 | -1.772991 |
5 | -0.384078 | 0.365353 | -0.252302 |
6 | -0.016087 | -0.632474 | -0.628749 |
df.fillna?
# fillna는 값을 채워 넣은 객체의 참조를 반환
_ = df.fillna(0, inplace=True)
df
0 | 1 | 2 | |
---|---|---|---|
0 | 1.105290 | 0.000000 | 0.000000 |
1 | -0.955932 | 0.000000 | 0.000000 |
2 | -1.679063 | 0.000000 | 0.000000 |
3 | -1.082717 | 0.000000 | -0.244171 |
4 | -0.014430 | 0.000000 | -1.772991 |
5 | -0.384078 | 0.365353 | -0.252302 |
6 | -0.016087 | -0.632474 | -0.628749 |
_ = df.fillna(1, inplace=False)
df
0 | 1 | 2 | |
---|---|---|---|
0 | 1.105290 | 0.000000 | 0.000000 |
1 | -0.955932 | 0.000000 | 0.000000 |
2 | -1.679063 | 0.000000 | 0.000000 |
3 | -1.082717 | 0.000000 | -0.244171 |
4 | -0.014430 | 0.000000 | -1.772991 |
5 | -0.384078 | 0.365353 | -0.252302 |
6 | -0.016087 | -0.632474 | -0.628749 |
df.fillna(1, inplace=True)
# 이미 NA값이 0.0 으로 채워져있기 때문에 1로 바뀌지 않는다.
df
0 | 1 | 2 | |
---|---|---|---|
0 | 1.105290 | 0.000000 | 0.000000 |
1 | -0.955932 | 0.000000 | 0.000000 |
2 | -1.679063 | 0.000000 | 0.000000 |
3 | -1.082717 | 0.000000 | -0.244171 |
4 | -0.014430 | 0.000000 | -1.772991 |
5 | -0.384078 | 0.365353 | -0.252302 |
6 | -0.016087 | -0.632474 | -0.628749 |
df = DataFrame(np.random.randn(6, 3))
df.ix[2:, 1] = NA
df.ix[4:, 2] = NA
df
0 | 1 | 2 | |
---|---|---|---|
0 | 0.031714 | 0.522461 | 1.543997 |
1 | 1.084614 | -1.225614 | -0.680466 |
2 | 1.387762 | NaN | 0.723371 |
3 | -1.152981 | NaN | 0.283652 |
4 | 1.282276 | NaN | NaN |
5 | -1.048720 | NaN | NaN |
df.fillna(method='ffill')
0 | 1 | 2 | |
---|---|---|---|
0 | 0.031714 | 0.522461 | 1.543997 |
1 | 1.084614 | -1.225614 | -0.680466 |
2 | 1.387762 | -1.225614 | 0.723371 |
3 | -1.152981 | -1.225614 | 0.283652 |
4 | 1.282276 | -1.225614 | 0.283652 |
5 | -1.048720 | -1.225614 | 0.283652 |
df.fillna(method='ffill', limit=2)
0 | 1 | 2 | |
---|---|---|---|
0 | 0.031714 | 0.522461 | 1.543997 |
1 | 1.084614 | -1.225614 | -0.680466 |
2 | 1.387762 | -1.225614 | 0.723371 |
3 | -1.152981 | -1.225614 | 0.283652 |
4 | 1.282276 | NaN | 0.283652 |
5 | -1.048720 | NaN | 0.283652 |
data = Series([1., NA, 3.5, NA, 7])
data.fillna(data.mean())
0 1.000000 1 3.833333 2 3.500000 3 3.833333 4 7.000000 dtype: float64
data
0 1.0 1 NaN 2 3.5 3 NaN 4 7.0 dtype: float64
인자 | 설명 |
---|---|
value | 비어있는 값을 채울 스칼라 값이나 사전 형식의 객체 |
method | 보간 방식. 기본적으로 'ffill'을 사용한다. |
axis | 값을 채워 넣을 축. 기본 값은 0 |
inace | 복사본을 생성하지 않고 호출한 객체를 변경한다. 기본값은 False |
limit | 값을 앞 혹은 뒤에서 몇 개까지 채울지를 지정한다. |
data = Series(np.random.randn(10),
index = [['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'd', 'd'],
[1, 2, 3, 1, 2, 3, 1, 2, 2, 3]])
data
a 1 -0.041546 2 -1.894623 3 1.326466 b 1 -0.210593 2 1.410247 3 2.717005 c 1 1.639305 2 -2.528040 d 2 -0.947952 3 -0.001164 dtype: float64
data.index
MultiIndex [(u'a', 1), (u'a', 2), (u'a', 3), (u'b', 1), (u'b', 2), (u'b', 3), (u'c', 1), (u'c', 2), (u'd', 2), (u'd', 3)]
data['b']
1 -0.210593 2 1.410247 3 2.717005 dtype: float64
data['b':'c']
b 1 -0.210593 2 1.410247 3 2.717005 c 1 1.639305 2 -2.528040 dtype: float64
data.ix[['b', 'd']]
b 1 -0.210593 2 1.410247 3 2.717005 d 2 -0.947952 3 -0.001164 dtype: float64
data['b':'d']
b 1 -0.210593 2 1.410247 3 2.717005 c 1 1.639305 2 -2.528040 d 2 -0.947952 3 -0.001164 dtype: float64
# Failed!
data['b', 'c']
--------------------------------------------------------------------------- KeyError Traceback (most recent call last) <ipython-input-362-c6d18aac3c30> in <module>() 1 # Failed! ----> 2 data['b', 'c'] /Library/Python/2.7/site-packages/pandas-0.12.0_307_g3a2fe0b-py2.7-macosx-10.8-intel.egg/pandas/core/series.pyc in __getitem__(self, key) 925 key = _check_bool_indexer(self.index, key) 926 --> 927 return self._get_with(key) 928 929 def _get_with(self, key): /Library/Python/2.7/site-packages/pandas-0.12.0_307_g3a2fe0b-py2.7-macosx-10.8-intel.egg/pandas/core/series.pyc in _get_with(self, key) 942 if isinstance(key, tuple): 943 try: --> 944 return self._get_values_tuple(key) 945 except: 946 if len(key) == 1: /Library/Python/2.7/site-packages/pandas-0.12.0_307_g3a2fe0b-py2.7-macosx-10.8-intel.egg/pandas/core/series.pyc in _get_values_tuple(self, key) 990 991 # If key is contained, would have returned by now --> 992 indexer, new_index = self.index.get_loc_level(key) 993 return self._constructor(self.values[indexer], index=new_index, name=self.name) 994 /Library/Python/2.7/site-packages/pandas-0.12.0_307_g3a2fe0b-py2.7-macosx-10.8-intel.egg/pandas/core/index.pyc in get_loc_level(self, key, level, drop_level) 2638 if len(key) == self.nlevels: 2639 if self.is_unique: -> 2640 return self._engine.get_loc(_values_from_object(key)), None 2641 else: 2642 indexer = slice(*self.slice_locs(key, key)) /Library/Python/2.7/site-packages/pandas-0.12.0_307_g3a2fe0b-py2.7-macosx-10.8-intel.egg/pandas/index.so in pandas.index.IndexEngine.get_loc (pandas/index.c:3330)() /Library/Python/2.7/site-packages/pandas-0.12.0_307_g3a2fe0b-py2.7-macosx-10.8-intel.egg/pandas/index.so in pandas.index.IndexEngine.get_loc (pandas/index.c:3210)() /Library/Python/2.7/site-packages/pandas-0.12.0_307_g3a2fe0b-py2.7-macosx-10.8-intel.egg/pandas/hashtable.so in pandas.hashtable.PyObjectHashTable.get_item (pandas/hashtable.c:10484)() /Library/Python/2.7/site-packages/pandas-0.12.0_307_g3a2fe0b-py2.7-macosx-10.8-intel.egg/pandas/hashtable.so in pandas.hashtable.PyObjectHashTable.get_item (pandas/hashtable.c:10438)() KeyError: ('b', 'c')
data[:, 2]
a -1.894623 b 1.410247 c -2.528040 d -0.947952 dtype: float64
# 현재 index가 multi index니까
# 앞은 a,b,c,d 중에 하나
# 뒤는 1,2,3 중에 하나
data['a',2]
-1.8946225480802827
# 없는 키니까 당연히 에러. c는 2번째 index가 1,2 밖에 없음
data['c',3]
--------------------------------------------------------------------------- KeyError Traceback (most recent call last) <ipython-input-365-668c176dd129> in <module>() 1 # 없는 키니까 당연히 에러. c는 2번째 index가 1,2 밖에 없음 ----> 2 data['c',3] /Library/Python/2.7/site-packages/pandas-0.12.0_307_g3a2fe0b-py2.7-macosx-10.8-intel.egg/pandas/core/series.pyc in __getitem__(self, key) 925 key = _check_bool_indexer(self.index, key) 926 --> 927 return self._get_with(key) 928 929 def _get_with(self, key): /Library/Python/2.7/site-packages/pandas-0.12.0_307_g3a2fe0b-py2.7-macosx-10.8-intel.egg/pandas/core/series.pyc in _get_with(self, key) 942 if isinstance(key, tuple): 943 try: --> 944 return self._get_values_tuple(key) 945 except: 946 if len(key) == 1: /Library/Python/2.7/site-packages/pandas-0.12.0_307_g3a2fe0b-py2.7-macosx-10.8-intel.egg/pandas/core/series.pyc in _get_values_tuple(self, key) 990 991 # If key is contained, would have returned by now --> 992 indexer, new_index = self.index.get_loc_level(key) 993 return self._constructor(self.values[indexer], index=new_index, name=self.name) 994 /Library/Python/2.7/site-packages/pandas-0.12.0_307_g3a2fe0b-py2.7-macosx-10.8-intel.egg/pandas/core/index.pyc in get_loc_level(self, key, level, drop_level) 2638 if len(key) == self.nlevels: 2639 if self.is_unique: -> 2640 return self._engine.get_loc(_values_from_object(key)), None 2641 else: 2642 indexer = slice(*self.slice_locs(key, key)) /Library/Python/2.7/site-packages/pandas-0.12.0_307_g3a2fe0b-py2.7-macosx-10.8-intel.egg/pandas/index.so in pandas.index.IndexEngine.get_loc (pandas/index.c:3330)() /Library/Python/2.7/site-packages/pandas-0.12.0_307_g3a2fe0b-py2.7-macosx-10.8-intel.egg/pandas/index.so in pandas.index.IndexEngine.get_loc (pandas/index.c:3210)() /Library/Python/2.7/site-packages/pandas-0.12.0_307_g3a2fe0b-py2.7-macosx-10.8-intel.egg/pandas/hashtable.so in pandas.hashtable.PyObjectHashTable.get_item (pandas/hashtable.c:10484)() /Library/Python/2.7/site-packages/pandas-0.12.0_307_g3a2fe0b-py2.7-macosx-10.8-intel.egg/pandas/hashtable.so in pandas.hashtable.PyObjectHashTable.get_item (pandas/hashtable.c:10438)() KeyError: ('c', 3)
data['c', 2]
-2.5280397543435429
data
a 1 -0.041546 2 -1.894623 3 1.326466 b 1 -0.210593 2 1.410247 3 2.717005 c 1 1.639305 2 -2.528040 d 2 -0.947952 3 -0.001164 dtype: float64
data.unstack()
1 | 2 | 3 | |
---|---|---|---|
a | -0.041546 | -1.894623 | 1.326466 |
b | -0.210593 | 1.410247 | 2.717005 |
c | 1.639305 | -2.528040 | NaN |
d | NaN | -0.947952 | -0.001164 |
# 당연히 unstack 후에 다시 stack 하니 다시 돌아가겠지
data.unstack().stack()
a 1 -0.041546 2 -1.894623 3 1.326466 b 1 -0.210593 2 1.410247 3 2.717005 c 1 1.639305 2 -2.528040 d 2 -0.947952 3 -0.001164 dtype: float64
frame = DataFrame(np.arange(12).reshape((4, 3)),
index=[['a', 'a', 'b', 'b'], [1, 2, 1, 2]],
columns=[['Ohio', 'Ohio', 'Colorado'],
['Green', 'Red', 'Green']])
frame
Ohio | Colorado | |||
---|---|---|---|---|
Green | Red | Green | ||
a | 1 | 0 | 1 | 2 |
2 | 3 | 4 | 5 | |
b | 1 | 6 | 7 | 8 |
2 | 9 | 10 | 11 |
frame.index.names = ['key1', 'key2']
frame.columns.names = ['state', 'color']
frame
state | Ohio | Colorado | ||
---|---|---|---|---|
color | Green | Red | Green | |
key1 | key2 | |||
a | 1 | 0 | 1 | 2 |
2 | 3 | 4 | 5 | |
b | 1 | 6 | 7 | 8 |
2 | 9 | 10 | 11 |
frame['Ohio']
color | Green | Red | |
---|---|---|---|
key1 | key2 | ||
a | 1 | 0 | 1 |
2 | 3 | 4 | |
b | 1 | 6 | 7 |
2 | 9 | 10 |
pd.MultiIndex.from_arrays([['Ohio', 'Ohio', 'Colorado'], ['Green', 'Red', 'Green']],
names=['state', 'color'])
MultiIndex [(u'Ohio', u'Green'), (u'Ohio', u'Red'), (u'Colorado', u'Green')]
frame.swaplevel('key1', 'key2')
state | Ohio | Colorado | ||
---|---|---|---|---|
color | Green | Red | Green | |
key2 | key1 | |||
1 | a | 0 | 1 | 2 |
2 | a | 3 | 4 | 5 |
1 | b | 6 | 7 | 8 |
2 | b | 9 | 10 | 11 |
frame
state | Ohio | Colorado | ||
---|---|---|---|---|
color | Green | Red | Green | |
key1 | key2 | |||
a | 1 | 0 | 1 | 2 |
2 | 3 | 4 | 5 | |
b | 1 | 6 | 7 | 8 |
2 | 9 | 10 | 11 |
frame.sortlevel?
frame.sortlevel(1)
state | Ohio | Colorado | ||
---|---|---|---|---|
color | Green | Red | Green | |
key1 | key2 | |||
a | 1 | 0 | 1 | 2 |
b | 1 | 6 | 7 | 8 |
a | 2 | 3 | 4 | 5 |
b | 2 | 9 | 10 | 11 |
frame.sortlevel('key2')
state | Ohio | Colorado | ||
---|---|---|---|---|
color | Green | Red | Green | |
key1 | key2 | |||
a | 1 | 0 | 1 | 2 |
b | 1 | 6 | 7 | 8 |
a | 2 | 3 | 4 | 5 |
b | 2 | 9 | 10 | 11 |
frame.sortlevel(0)
state | Ohio | Colorado | ||
---|---|---|---|---|
color | Green | Red | Green | |
key1 | key2 | |||
a | 1 | 0 | 1 | 2 |
2 | 3 | 4 | 5 | |
b | 1 | 6 | 7 | 8 |
2 | 9 | 10 | 11 |
frame.sortlevel('key1')
state | Ohio | Colorado | ||
---|---|---|---|---|
color | Green | Red | Green | |
key1 | key2 | |||
a | 1 | 0 | 1 | 2 |
2 | 3 | 4 | 5 | |
b | 1 | 6 | 7 | 8 |
2 | 9 | 10 | 11 |
frame.swaplevel(0, 1).sortlevel(0)
state | Ohio | Colorado | ||
---|---|---|---|---|
color | Green | Red | Green | |
key2 | key1 | |||
1 | a | 0 | 1 | 2 |
b | 6 | 7 | 8 | |
2 | a | 3 | 4 | 5 |
b | 9 | 10 | 11 |
frame.swaplevel(0, 1).sortlevel(1)
state | Ohio | Colorado | ||
---|---|---|---|---|
color | Green | Red | Green | |
key2 | key1 | |||
1 | a | 0 | 1 | 2 |
2 | a | 3 | 4 | 5 |
1 | b | 6 | 7 | 8 |
2 | b | 9 | 10 | 11 |
frame
state | Ohio | Colorado | ||
---|---|---|---|---|
color | Green | Red | Green | |
key1 | key2 | |||
a | 1 | 0 | 1 | 2 |
2 | 3 | 4 | 5 | |
b | 1 | 6 | 7 | 8 |
2 | 9 | 10 | 11 |
frame.swaplevel(1, 0)
state | Ohio | Colorado | ||
---|---|---|---|---|
color | Green | Red | Green | |
key2 | key1 | |||
1 | a | 0 | 1 | 2 |
2 | a | 3 | 4 | 5 |
1 | b | 6 | 7 | 8 |
2 | b | 9 | 10 | 11 |
frame.swaplevel('key2', 'key1')
state | Ohio | Colorado | ||
---|---|---|---|---|
color | Green | Red | Green | |
key2 | key1 | |||
1 | a | 0 | 1 | 2 |
2 | a | 3 | 4 | 5 |
1 | b | 6 | 7 | 8 |
2 | b | 9 | 10 | 11 |
frame.swaplevel('key1', 'key2')
state | Ohio | Colorado | ||
---|---|---|---|---|
color | Green | Red | Green | |
key2 | key1 | |||
1 | a | 0 | 1 | 2 |
2 | a | 3 | 4 | 5 |
1 | b | 6 | 7 | 8 |
2 | b | 9 | 10 | 11 |
frame
state | Ohio | Colorado | ||
---|---|---|---|---|
color | Green | Red | Green | |
key1 | key2 | |||
a | 1 | 0 | 1 | 2 |
2 | 3 | 4 | 5 | |
b | 1 | 6 | 7 | 8 |
2 | 9 | 10 | 11 |
frame.sum(level='key1')
state | Ohio | Colorado | |
---|---|---|---|
color | Green | Red | Green |
key1 | |||
a | 3 | 5 | 7 |
b | 15 | 17 | 19 |
frame.sum(level='key2')
state | Ohio | Colorado | |
---|---|---|---|
color | Green | Red | Green |
key2 | |||
1 | 6 | 8 | 10 |
2 | 12 | 14 | 16 |
# soqnwjrdmfh pandas의 groupby 기능 이용해서 구현
frame.sum(level='color', axis=1)
color | Green | Red | |
---|---|---|---|
key1 | key2 | ||
a | 1 | 2 | 1 |
2 | 8 | 4 | |
b | 1 | 14 | 7 |
2 | 20 | 10 |
frame
state | Ohio | Colorado | ||
---|---|---|---|---|
color | Green | Red | Green | |
key1 | key2 | |||
a | 1 | 0 | 1 | 2 |
2 | 3 | 4 | 5 | |
b | 1 | 6 | 7 | 8 |
2 | 9 | 10 | 11 |
frame = DataFrame({'a': range(7),
'b': range(7, 0, -1),
'c': ['one', 'one', 'one', 'two', 'two', 'two', 'two'],
'd': [0, 1, 2, 0, 1, 2, 3]})
frame
a | b | c | d | |
---|---|---|---|---|
0 | 0 | 7 | one | 0 |
1 | 1 | 6 | one | 1 |
2 | 2 | 5 | one | 2 |
3 | 3 | 4 | two | 0 |
4 | 4 | 3 | two | 1 |
5 | 5 | 2 | two | 2 |
6 | 6 | 1 | two | 3 |
frame2 = frame.set_index(['c', 'd'])
frame2
a | b | ||
---|---|---|---|
c | d | ||
one | 0 | 0 | 7 |
1 | 1 | 6 | |
2 | 2 | 5 | |
two | 0 | 3 | 4 |
1 | 4 | 3 | |
2 | 5 | 2 | |
3 | 6 | 1 |
frame.set_index(['c', 'd'], drop=False)
a | b | c | d | ||
---|---|---|---|---|---|
c | d | ||||
one | 0 | 0 | 7 | one | 0 |
1 | 1 | 6 | one | 1 | |
2 | 2 | 5 | one | 2 | |
two | 0 | 3 | 4 | two | 0 |
1 | 4 | 3 | two | 1 | |
2 | 5 | 2 | two | 2 | |
3 | 6 | 1 | two | 3 |
# 계층적 색인 단계 -> 컬럼
frame2.reset_index()
c | d | a | b | |
---|---|---|---|---|
0 | one | 0 | 0 | 7 |
1 | one | 1 | 1 | 6 |
2 | one | 2 | 2 | 5 |
3 | two | 0 | 3 | 4 |
4 | two | 1 | 4 | 3 |
5 | two | 2 | 5 | 2 |
6 | two | 3 | 6 | 1 |
frame2
a | b | ||
---|---|---|---|
c | d | ||
one | 0 | 0 | 7 |
1 | 1 | 6 | |
2 | 2 | 5 | |
two | 0 | 3 | 4 |
1 | 4 | 3 | |
2 | 5 | 2 | |
3 | 6 | 1 |
ser = Series(np.arange(3.))
# 왼쪽에 있는 것이 이름 색인(0, 1, 2)
# 위치색인은 0, 1, 2 번째 순서대로 있는 것
# 현재는 위치 색인과, 이름 색인이 같기 때문에 프로그램에게는 혼동이 올 수 밖에
ser
0 0 1 1 2 2 dtype: float64
ser[0]
0.0
ser[2]
2.0
# -1이 0,1,2,...,-2,-1 의 정수
ser[-1]
--------------------------------------------------------------------------- KeyError Traceback (most recent call last) <ipython-input-434-e3493e85eec5> in <module>() 1 # -1이 0,1,2,...,-2,-1 의 정수 ----> 2 ser[-1] /Library/Python/2.7/site-packages/pandas-0.12.0_307_g3a2fe0b-py2.7-macosx-10.8-intel.egg/pandas/core/series.pyc in __getitem__(self, key) 903 def __getitem__(self, key): 904 try: --> 905 return self.index.get_value(self, key) 906 except InvalidIndexError: 907 pass /Library/Python/2.7/site-packages/pandas-0.12.0_307_g3a2fe0b-py2.7-macosx-10.8-intel.egg/pandas/core/index.pyc in get_value(self, series, key) 834 k = _values_from_object(key) 835 try: --> 836 return self._engine.get_value(s, k) 837 except KeyError as e1: 838 if len(self) > 0 and self.inferred_type == 'integer': /Library/Python/2.7/site-packages/pandas-0.12.0_307_g3a2fe0b-py2.7-macosx-10.8-intel.egg/pandas/index.so in pandas.index.IndexEngine.get_value (pandas/index.c:2658)() /Library/Python/2.7/site-packages/pandas-0.12.0_307_g3a2fe0b-py2.7-macosx-10.8-intel.egg/pandas/index.so in pandas.index.IndexEngine.get_value (pandas/index.c:2473)() /Library/Python/2.7/site-packages/pandas-0.12.0_307_g3a2fe0b-py2.7-macosx-10.8-intel.egg/pandas/index.so in pandas.index.IndexEngine.get_loc (pandas/index.c:3210)() /Library/Python/2.7/site-packages/pandas-0.12.0_307_g3a2fe0b-py2.7-macosx-10.8-intel.egg/pandas/hashtable.so in pandas.hashtable.Int64HashTable.get_item (pandas/hashtable.c:6422)() /Library/Python/2.7/site-packages/pandas-0.12.0_307_g3a2fe0b-py2.7-macosx-10.8-intel.egg/pandas/hashtable.so in pandas.hashtable.Int64HashTable.get_item (pandas/hashtable.c:6366)() KeyError: -1
ser
0 0 1 1 2 2 dtype: float64
ser5 = Series([0, 0, 1], index=[5, 6, 7])
ser5
5 0 6 0 7 1 dtype: int64
# 이걸 보면 이름 색인으로 접근하는 것을 알 수 있다.
ser5[6]
0
# 이름 색인이 정수라면 위치 색인을 사용할 수 없다.
ser5[-1]
--------------------------------------------------------------------------- KeyError Traceback (most recent call last) <ipython-input-450-cf70057686cf> in <module>() ----> 1 ser5[-1] /Library/Python/2.7/site-packages/pandas-0.12.0_307_g3a2fe0b-py2.7-macosx-10.8-intel.egg/pandas/core/series.pyc in __getitem__(self, key) 903 def __getitem__(self, key): 904 try: --> 905 return self.index.get_value(self, key) 906 except InvalidIndexError: 907 pass /Library/Python/2.7/site-packages/pandas-0.12.0_307_g3a2fe0b-py2.7-macosx-10.8-intel.egg/pandas/core/index.pyc in get_value(self, series, key) 834 k = _values_from_object(key) 835 try: --> 836 return self._engine.get_value(s, k) 837 except KeyError as e1: 838 if len(self) > 0 and self.inferred_type == 'integer': /Library/Python/2.7/site-packages/pandas-0.12.0_307_g3a2fe0b-py2.7-macosx-10.8-intel.egg/pandas/index.so in pandas.index.IndexEngine.get_value (pandas/index.c:2658)() /Library/Python/2.7/site-packages/pandas-0.12.0_307_g3a2fe0b-py2.7-macosx-10.8-intel.egg/pandas/index.so in pandas.index.IndexEngine.get_value (pandas/index.c:2473)() /Library/Python/2.7/site-packages/pandas-0.12.0_307_g3a2fe0b-py2.7-macosx-10.8-intel.egg/pandas/index.so in pandas.index.IndexEngine.get_loc (pandas/index.c:3210)() /Library/Python/2.7/site-packages/pandas-0.12.0_307_g3a2fe0b-py2.7-macosx-10.8-intel.egg/pandas/hashtable.so in pandas.hashtable.Int64HashTable.get_item (pandas/hashtable.c:6422)() /Library/Python/2.7/site-packages/pandas-0.12.0_307_g3a2fe0b-py2.7-macosx-10.8-intel.egg/pandas/hashtable.so in pandas.hashtable.Int64HashTable.get_item (pandas/hashtable.c:6366)() KeyError: -1
ser2 = Series(np.arange(3.), index=['a', 'b', 'c'])
ser2
a 0 b 1 c 2 dtype: float64
ser2[0]
0.0
ser2[1]
1.0
ser2[-1]
2.0
# ix는 끝 인덱스인 1까지 포함한다.
ser.ix[:1]
0 0 1 1 dtype: float64
ser3 = Series(range(3), index=[-5, 1, 3])
ser3
-5 0 1 1 3 2 dtype: int64
# 0,1의 1번째에 있는 값을 보여준다.
ser3.iget_value(1)
1
ser3.iget_value(2)
2
ser4 = Series([5,6,7], index=[-5, 1, 3])
# 위치인지 다시 한 번 확인했다.
# 위 예제에서는 이름 색인을 지정해주었지만(-5, 1, 3) 아무래도 혼란스러워서 다시 한 번 테스트 해봤다.
ser4.iget_value(0)
5
frame = DataFrame(np.arange(6).reshape((3, 2)), index=[2, 0, 1])
frame.irow(0)
0 0 1 1 Name: 2, dtype: int64
frame
0 | 1 | |
---|---|---|
2 | 0 | 1 |
0 | 2 | 3 |
1 | 4 | 5 |
frame.irow(1)
0 2 1 3 Name: 0, dtype: int64
# GOOG -> GOOGL
import pandas.io.data as web
pdata = pd.Panel(dict((stk, web.get_data_yahoo(stk, '1/1/2009', '6/1/2012'))
for stk in ['AAPL', 'GOOGL', 'MSFT', 'DELL']))
pdata
<class 'pandas.core.panel.Panel'> Dimensions: 4 (items) x 868 (major_axis) x 6 (minor_axis) Items axis: AAPL to MSFT Major_axis axis: 2009-01-02 00:00:00 to 2012-06-01 00:00:00 Minor_axis axis: Open to Adj Close
pdata = pdata.swapaxes('items', 'minor')
pdata
<class 'pandas.core.panel.Panel'> Dimensions: 6 (items) x 868 (major_axis) x 4 (minor_axis) Items axis: Open to Adj Close Major_axis axis: 2009-01-02 00:00:00 to 2012-06-01 00:00:00 Minor_axis axis: AAPL to MSFT
pdata['Adj Close']
<class 'pandas.core.frame.DataFrame'> DatetimeIndex: 868 entries, 2009-01-02 00:00:00 to 2012-06-01 00:00:00 Data columns (total 4 columns): AAPL 861 non-null values DELL 868 non-null values GOOGL 861 non-null values MSFT 861 non-null values dtypes: float64(4)
# 1번째 인자: Open, High, Low, Close, Volume, Adj Close
# 2번째 인자: 날짜
# 3번째 인자: 회사
pdata.ix[:, '6/1/2012', :]
Open | High | Low | Close | Volume | Adj Close | |
---|---|---|---|---|---|---|
AAPL | 569.16 | 572.65 | 560.52 | 560.99 | 18606700 | 536.20 |
DELL | 12.15 | 12.30 | 12.05 | 12.07 | 19397600 | 11.68 |
GOOGL | 571.79 | 572.65 | 568.35 | 570.98 | 6109600 | 285.78 |
MSFT | 28.76 | 28.96 | 28.44 | 28.45 | 56634300 | 26.82 |
pdata.ix['High', '5/22/2012':, :]
AAPL | DELL | GOOGL | MSFT | |
---|---|---|---|---|
Date | ||||
2012-05-22 | 573.88 | 15.29 | 613.81 | 29.88 |
2012-05-23 | 572.80 | 13.10 | 609.60 | 29.40 |
2012-05-24 | 576.50 | 12.63 | 611.92 | 29.30 |
2012-05-25 | 565.85 | 12.70 | 601.73 | 29.36 |
2012-05-28 | NaN | 12.46 | NaN | NaN |
2012-05-29 | 574.00 | 12.84 | 599.13 | 29.72 |
2012-05-30 | 579.99 | 12.70 | 591.90 | 29.48 |
2012-05-31 | 581.50 | 12.54 | 590.00 | 29.42 |
2012-06-01 | 572.65 | 12.30 | 572.65 | 28.96 |
pdata.ix['High', '5/22/2012', :]
AAPL 573.88 DELL 15.29 GOOGL 613.81 MSFT 29.88 Name: 2012-05-22 00:00:00, dtype: float64
pdata.ix['Open', '5/22/2012', 'AAPL']
569.54999999999995
pdata.ix['High', '5/22/2012':, 'AAPL']
Date 2012-05-22 573.88 2012-05-23 572.80 2012-05-24 576.50 2012-05-25 565.85 2012-05-28 NaN 2012-05-29 574.00 2012-05-30 579.99 2012-05-31 581.50 2012-06-01 572.65 Name: AAPL, dtype: float64
pdata.ix['Adj Close', '5/22/2012':, :]
AAPL | DELL | GOOGL | MSFT | |
---|---|---|---|---|
Date | ||||
2012-05-22 | 532.36 | 14.59 | 300.70 | 28.05 |
2012-05-23 | 545.35 | 12.08 | 305.04 | 27.44 |
2012-05-24 | 540.34 | 12.04 | 302.13 | 27.40 |
2012-05-25 | 537.45 | 12.05 | 296.06 | 27.39 |
2012-05-28 | NaN | 12.05 | NaN | NaN |
2012-05-29 | 546.98 | 12.25 | 297.47 | 27.86 |
2012-05-30 | 553.58 | 12.15 | 294.41 | 27.66 |
2012-05-31 | 552.20 | 11.93 | 290.72 | 27.51 |
2012-06-01 | 536.20 | 11.68 | 285.78 | 26.82 |
# Dimensions: 6, 3, 4 라는걸 확인할 수 있다.
pdata.ix[:, '5/30/2012':, :]
<class 'pandas.core.panel.Panel'> Dimensions: 6 (items) x 3 (major_axis) x 4 (minor_axis) Items axis: Open to Adj Close Major_axis axis: 2012-05-30 00:00:00 to 2012-06-01 00:00:00 Minor_axis axis: AAPL to MSFT
stacked = pdata.ix[:, '5/30/2012':, :].to_frame()
stacked
Open | High | Low | Close | Volume | Adj Close | ||
---|---|---|---|---|---|---|---|
Date | minor | ||||||
2012-05-30 | AAPL | 569.20 | 579.99 | 566.56 | 579.17 | 18908200 | 553.58 |
DELL | 12.59 | 12.70 | 12.46 | 12.56 | 19787800 | 12.15 | |
GOOGL | 588.16 | 591.90 | 583.53 | 588.23 | 3809500 | 294.41 | |
MSFT | 29.35 | 29.48 | 29.12 | 29.34 | 41585500 | 27.66 | |
2012-05-31 | AAPL | 580.74 | 581.50 | 571.46 | 577.73 | 17559800 | 552.20 |
DELL | 12.53 | 12.54 | 12.33 | 12.33 | 19955600 | 11.93 | |
GOOGL | 588.72 | 590.00 | 579.00 | 580.86 | 5930600 | 290.72 | |
MSFT | 29.30 | 29.42 | 28.94 | 29.19 | 39134000 | 27.51 | |
2012-06-01 | AAPL | 569.16 | 572.65 | 560.52 | 560.99 | 18606700 | 536.20 |
DELL | 12.15 | 12.30 | 12.05 | 12.07 | 19397600 | 11.68 | |
GOOGL | 571.79 | 572.65 | 568.35 | 570.98 | 6109600 | 285.78 | |
MSFT | 28.76 | 28.96 | 28.44 | 28.45 | 56634300 | 26.82 |
type(stacked), type(pdata)
(pandas.core.frame.DataFrame, pandas.core.panel.Panel)
stacked.to_panel()
<class 'pandas.core.panel.Panel'> Dimensions: 6 (items) x 3 (major_axis) x 4 (minor_axis) Items axis: Open to Adj Close Major_axis axis: 2012-05-30 00:00:00 to 2012-06-01 00:00:00 Minor_axis axis: AAPL to MSFT