データ分析フレームワークPands入門
データ構造:
Series
Seriesは一次元配列のようなデータ構造で、出力時にインデックスと値を同時に表示します.
DataFrameはテーブル形式のデータ構造です.
辞書に入ることによって作成できます.各keyは次元の名前です.着信後は列に並べば、自動的に1行に0から始まる索引が加えられます.
索引オブジェクト
indexは特別な対象です.このオブジェクトは生成後は変更できません.indexも1つの集合に相当して、交際を求めることがいて、そして操作を待ちます.
基本機能
インデックスを並べ替えて、reindexを使って、元のSeriesの中に存在しないインデックスに対して、その値はfill_です.value(デフォルトはNaN)
指定された軸のアイテムを破棄します.
drop方法を使用して、ある行または列を削除します.返したのはコピーです.元のDataFrameに影響しません.列を削除するにはaxis=1を指定する必要があります.axisはデフォルトで0です.
ブック型SeriesをSeriesのインデックスとして使用すると、Trueのインデックスの値が表示されます.
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 FrameDataFrameはテーブル形式のデータ構造です.
辞書に入ることによって作成できます.各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指定