データ分析フレームワークPands入門


データ構造:
Series
Seriesは一次元配列のようなデータ構造で、出力時にインデックスと値を同時に表示します.
In [6]: a = Series([3,5,2])
In [7]: a
Out[7]:
0    3
1    5
2    2
dtype: int64
索引と値をそれぞれ取得します.
In [10]: a.values
Out[10]: array([3, 5, 2], dtype=int64)

In [11]: a.index
Out[11]: RangeIndex(start=0, stop=3, step=1)
インデックス値の指定
In [17]: b = Series([3,5,2],index = ['a','b','c'])

In [18]: b
Out[18]:
a    3
b    5
c    2
dtype: int64
あるキーが辞書の中にあるかどうかを判断します.
In [22]: 'a' in b
Out[22]: True

In [23]: 'f' in b
Out[23]: False
python辞書を使ってSeriesを作成します.
In [25]: a = Series({'a':3, 'b':6, 'c':4})

In [26]: a
Out[26]:
a    3
b    6
c    4
dtype: int64
作成時に辞書や索引の列に入ると、索引と辞書の索引が自動的に対応します.あるインデックスが辞書にない場合、その値はNaNです.
In [27]: dr = {'a':3, 'b':6, 'c':4}

In [28]: idx = ['a','b','c','d']

In [29]: b =  Series(dr,index = idx)

In [30]: b
Out[30]:
a    3.0
b    6.0
c    4.0
d    NaN
dtype: float64
Seriesの要素の索引は繰り返しできます.
In [31]: idx = ['a','a']

In [32]: b = Series(dr,idx)
In [36]: b['a']
Out[36]:
a    3
a    3
dtype: int64
各要素の値がnullかどうかを判断します.
In [49]: b
Out[49]:
a    3.0
b    6.0
c    4.0
d    NaN
dtype: float64

In [50]: pd.isnull(b)
Out[50]:
a    False
b    False
c    False
d     True
dtype: bool

In [51]: pd.notnull(b)
Out[51]:
a     True
b     True
c     True
d    False
dtype: bool
Seriesは相互演算時に自動的にインデックスに対応します.NaNと任意の数値演算結果はNaNです.
In [59]: t1
Out[59]:
a    3.0
d    NaN
dtype: float64

In [60]: t2
Out[60]:
a    2
d    3
dtype: int64

In [61]: t1 + t2
Out[61]:
a    5.0
d    NaN
dtype: float64
Seriesとそのインデックスに名前を付けることができます.
In [64]: b.name = 'testname'

In [65]: b.index.name = 'indexname'
In [70]: b
Out[70]:
indexname
a    3.0
b    6.0
c    4.0
d    NaN
Name: testname, dtype: float64
indexは直接に値を賦課する方法で修正できます.
In [15]: b.index = ['x','y','z','t']

In [16]: b
Out[16]:
x    2.0
y    3.0
z    4.0
t    NaN
dtype: float64
Data Frame
DataFrameはテーブル形式のデータ構造です.
辞書に入ることによって作成できます.各keyは次元の名前です.着信後は列に並べば、自動的に1行に0から始まる索引が加えられます.
In [18]: data
Out[18]: {'a': [1, 2, 3], 'b': [2, 4, 3], 'c': [3, 5, 4]}
In [20]: frm = DataFrame(data)

In [21]: frm
Out[21]:
   a  b  c
0  1  2  3
1  2  4  5
2  3  3  4
パラメータcolumnsは列を指定の順序で並べられます.列名がdataにない場合、列値はNaN、indexは各行にインデックス名を指定します.
In [24]: frm = DataFrame(data,columns = ['c','b','a'],index = ['one','two','three'])

In [25]: frm
Out[25]:
       c  b  a
one    3  2  1
two    5  4  2
three  4  3  3
ある行と列にアクセスしてSeriesに戻ります.これはDataFrameの表示に直接戻ります.コピーを返す場合はcopyを使います.
In [26]: frm['c']
Out[26]:
one      3
two      5
three    4
Name: c, dtype: int64

In [28]: frm.ix['one']
Out[28]:
c    3
b    2
a    1
Name: one, dtype: int64
Seriesを使用すると、ある列に割り当てられ、自動的にindexに合わせます.このSeriesにはないインデックスは、DataFrameには表示されません.DataFrameにはないインデックスがNaNに割り当てられます.
In [6]: frm = DataFrame(dr,index = ['one','two','three'])
In [8]: frm
Out[8]:
       a  b  c
one    3  2  1
two    2  4  4
three  1  1  2

In [9]: sr = Series(range(3),index = ['two','one','three'])

In [10]: frm['a'] = sr

In [11]: frm
Out[11]:
       a  b  c
one    1  2  1
two    0  4  4
three  2  1  2
直接に値を付けて新しい列を作成します.
In [20]: frm
Out[20]:
         a  b  c
one    1.0  2  1
two    0.0  4  4
three  NaN  1  2

In [21]: frm['d'] = 1

In [22]: frm
Out[22]:
         a  b  c  d
one    1.0  2  1  1
two    0.0  4  4  1
three  NaN  1  2  1
2次元辞書を使ってDataFrameを作成します.一次元索引は、各列の名前であり、二次元索引は各行の名前である.
In [23]: dr2 = {'a':{'one':1,'two':2},'b':{'one':3,'three':4}}

In [24]: frm = DataFrame(dr2)

In [25]: frm
Out[25]:
         a    b
one    1.0  3.0
three  NaN  4.0
two    2.0  NaN
DataFrameのvaluesはNumpyの2次元arrayです.
索引オブジェクト
indexは特別な対象です.このオブジェクトは生成後は変更できません.indexも1つの集合に相当して、交際を求めることがいて、そして操作を待ちます.
基本機能
インデックスを並べ替えて、reindexを使って、元のSeriesの中に存在しないインデックスに対して、その値はfill_です.value(デフォルトはNaN)
In [27]: sr = Series([1,2,3],index = ['a','b','c'])

In [28]: sr
Out[28]:
a    1
b    2
c    3
dtype: int64

In [30]: sr.reindex(['c','a','b','d'],fill_value = 0)
Out[30]:
c    3.0
a    1.0
b    2.0
d    0
dtype: float64
規則に従って自動的に内挿する.以下の例は、順方向補間であり、各未割り当てのインデックスは前の要素の値として付与される.似たような方法はbfillもあります.
In [35]: sr2 = Series([0,1],index = [0,3])

In [36]: sr2
Out[36]:
0    0
3    1
dtype: int64

In [41]: sr2.reindex(range(5),method = 'ffill') Out[41]:
0    0
1    0
2    0
3    1
4    1
dtype: int64
DataFrameの行と列に対してはreindexができますが、列の上でのみffillなどの操作ができます.ixを使ってもいいです.行をリダイレクトします.
指定された軸のアイテムを破棄します.
drop方法を使用して、ある行または列を削除します.返したのはコピーです.元のDataFrameに影響しません.列を削除するにはaxis=1を指定する必要があります.axisはデフォルトで0です.
In [3]:  frm = DataFrame(np.arange(9).reshape(3,3),index = ['a','b','c'],columns = range(3))

In [4]: frm
Out[4]:
   0  1  2
a  0  1  2
b  3  4  5
c  6  7  8

In [7]: frm.drop('a')
Out[7]:
   0  1  2
b  3  4  5
c  6  7  8

In [6]: frm.drop(1,axis = 1)
Out[6]:
   0  2
a  0  2
b  3  5
c  6  8
索引、選択およびフィルタリング
ブック型SeriesをSeriesのインデックスとして使用すると、Trueのインデックスの値が表示されます.
In [8]: sr1 = Series(range(4),index = ['a','b','c','d'])

In [9]: sr1
Out[9]:
a    0
b    1
c    2
d    3
dtype: int64

In [13]: t = sr1>1

In [14]: t
Out[14]:
a    False
b    False
c     True
d     True
dtype: bool

In [16]: sr1[t]
Out[16]:
c    2
d    3
dtype: int64
Seriesの切片演算は左右とも閉区間です.
In [18]: sr1['a':'d']
Out[18]:
a    0
b    1
c    2
d    3
dtype: int64
DataFrameのインデックスは複雑で、主にいくつかの状況に分けられます.
In [3]: frm = DataFrame(np.arange(9).reshape(3,3),index = ['a','b','c'],columns = range(3))

In [4]: frm
Out[4]:
   0  1  2
a  0  1  2
b  3  4  5
c  6  7  8
#        ,     
In [5]: frm[1]
Out[5]:
a    1
b    4
c    7
Name: 1, dtype: int32
#  ix  ,     
In [6]: frm.ix[1]
Out[6]:
0    3
1    4
2    5
Name: b, dtype: int32
#      ,     ,         Series,      DataFrame
In [7]: frm[1:2]
Out[7]:
   0  1  2
b  3  4  5
Series、DataFrameは相互演算の際に自動的にラベルによって配置されます.非交差ラベル演算の結果はNaNです.これはfill_によってできます.value指定