仕事上、早々にを使えるようにしないといけないため、
を基に学んでいく。
1. はじめに
1.1 本書の内容
- によるデータ操作、処理、クリーニングおよび高速処理の基本を学ぶ。
1.1.1 扱うデータの範囲
- ここでは構造化された情報をデータと呼ぶ。具体的には、 ①複数の異なる型の列からなる表形式やスプレッド形式のデータ ②複数の次元を持つ配列 ③キー列で関連付けられた複数の表 ④(不)均一に配置された時系列が当てはまる。
2. Python組み込みのデータ構造と関数、ファイルの扱い
2.1 データ構造とシーケンス
2.1.1 タプル
- タプルは固定長でイミュータブルなオブジェクトの集合である。
### タプルの構成方法 # (1-1) tup = 4,5,6 print(tup) # (1-2) nested_tup = (4,5,6),(7,8) print(nested_tup) # (2) tuple([4,0,2]) tup = tuple('string') print(tup)
- タプルを分解するには以下のような方法がある。変数分解の一般的な用途は、タプルやリストのシーケンスを反復処理することにある。他には、関数から複数の値を戻すことにある。
# タプルの分解 tup = (4,5,6) a,b,c = tup print(a) print(b) print(c) tup = 4,5,(6,7) a,b,(c,d) = tup print(d) # 入れ替え a, b = 1,2 b,a = a,b print(a) print(b) ################## seq = [(1,2,3),(4,5,6),(7,8,9)] for a,b,c in seq: print('a = {0}, b = {1}, c = {2}'.format(a, b, c))
- タプル内のある値の個数はで行う。
a = (1,2,2,2,3,4,2) a.count(2)
2.1.2 リスト
- リストは、タプルとは異なり、可変長で内容を差し替えることもできる。
### リストの定義 # (1) []で括る a_list = [2, 3, 7, None] # (2) list()を用いる tup = 'foo', 'bar', 'baz' b_list = list(tup) b_list[1] = 'peekaboo' print(b_list) gen = range(10) gen = list(gen) print(gen)
- メソッドを用いてリストの末尾に要素を追加できる。
### tup = 'foo', 'bar', 'baz' b_list = list(tup) # 末尾に値を追加 b_list.append('dwarf') print(b_list) # 指定した位置に値を追加 b_list.insert(1,'red') print(b_list) # 指定した位置の値を削除する b_list.pop(1) print(b_list) # 特定の値のうち、最初にある値を削除する b_list.append('foo') b_list.remove('foo') print(b_list) # 特定の値があるか否かの論理値を返す print('foo' in b_list) print('foo' not in b_list)
- リストの連結には + 演算子を用いればよい。既存のリストに結合するならば、メソッドを用いればよい。
c_list = [4, None, 'foo'] + [7, 8, (2,3)] print(c_list) x = [4, None, 'foo'] x.extend([7,8,(2,3)]) print(x)
- ソートするには、メソッドを用いる。
a = [7,2,5,1,3] print(a) a.sort() print(a) b = ['saw','small','He','foxes','six'] print(b) b.sort(key = len) print(b)
- スライシングをするには、インデックス参照の演算子である[]に対して、:形式の書き方で抽出したい部分を指定する。
### スライシング seq = [7,2,3,7,5,6,0,1] seq[1:5] # seq[3:4] = [6,3] print(seq) # start, stopを省略することもできる print(seq[:5]) print(seq[3:]) print(seq[-4]) # -は末尾からの相対的な位置を取る # stepを指定する seq[::2] seq[::-1] # リストやタプルを反転させる
2.1.3 組み込み関数のシーケンス関数
- 関数は、シーケンスに対して(,)という形式のタプルをシーケンスにしたものを返す。
### # enumerate sequence = ['Jim', 'Jack', 'Thomas'] for i,value in enumerate(sequence): print(str(i) + ':' + value) mapping = {} for i,v in enumerate(sequence): mapping[v] = i print(mapping) # 重複の無いsequenceのインデックス値のマップを作る # sorted print(sorted([7,1,2,6,0,3,2])) # zip seq1 = ['foo', 'bar', 'baz'] seq2 = ['one', 'two', 'three'] zipped = zip(seq1, seq2) print(list(zipped)) for i,(a,b) in enumerate(zip(seq1, seq2)): print('{0}:{1},{2}'.format(i,a,b)) # 複数のシーケンスを同時に逐次処理する # reversed list(reversed(range(10)))