Click here to load reader
Python for Data Analysisかわの まこと
Combining and Merging DataSetsデータを結合する方法:• pandas.merge
- 1つ以上のキーを元に行を結合する⇒SQL joinと似てる
• pandas.concat - 軸にそって結合する
• combine_first - 欠損値を埋めるように重複データを結合する
2
DB-styleなpandas.mergeMerge, Join: リレーショナルデータベースでよく使われる方法
• df1: 複数の”a”,”b”ラベリングがある
• df2: 単一のラベリング
列を指定しなければ,重複列をkeyとして使う
基本的には’inner’ join
• それ以外: ‘left’, ‘right’, ‘outer’3
merge function arguments
4
Argument Description
left 左側から結合するDataFrameright 右側から結合するDataFrame
how inner’, ‘outer’, ‘left’ or ‘right’のどれをつかうか tukauno on 結合する列の名前.両方のDataFrameにないとだめ.
left_on 左のDataFrameの結合キーright_on 右のDataFrameの結合キー
left_index インデックスを左の結合キーとして扱うright_index インデックスを右の結合キーとして扱う
sort結合キーで辞書的にソートする.基本True.巨大なデータセットなどではFalse推奨
suffixes 重複してる時に加える文字列.デフォルトは(‘_x’, ‘_y’) -> ‘data_x’, ‘data_y’
copy Falseにするとコピーしなくなる
Merge on Indexインデックスに結合キーがあるときある• left_index=True or right_index=True (or 両方)
mergeよりjoinっていうインスタンスメソッド使ったほうが◯
5
Concatenating Along as Axisnumpy.concatenateと同様なことが出来るpandas.concat
6
Argument Descriptionobjs 結合するpandasオブジェクトのリストかdictaxis 結合する方向.デフォルトaxis=0join inner’,’outer’のどちらか.デフォルト’outer’
join_axes 特定のインデックスで結合する場合keys 階層的インデックスを作るlevels 特定のインデックスを階層的インデックスに使うnames 階層的インデックスに名前をつける
verify_integrity 新しい軸が重複してないかチェックしてあったらエラー(デフォルトFalse)ignore_index インデックスを無視して,新しいインデックスを振り直す
Combining Data with Overlapmerge, concatenationでも出来ないデータ結合
combine_first• よく欠損値に当てたりする
7
Reshaping and Pivoting階層的インデックスで便利• stack: 列を分解して行にする
• unstack: 行を分解して列にする
8
Pivoting "long" to "wide" FormatDBやCSVの時系列データを扱う
pandas.DataFrame.pivot• ldata.pivot(‘data’, ‘item’)
= ldata.set_index([‘date’, ‘item’]).unstack(‘item’)
9
Data TransformationRemoving Duplicates• pandas.DataFrame.duplicated • pandas.DataFrame.drop_duplicates
Transforming Data Using a Function or Mapping
10
Data TransformationTransforming Data Using a Function or Mapping • 配列にある値で変換したい時あるよね
• pandas.DataFrame.map()
11
Data TransformationReplacing Values
欠損値を埋めるfillnaあるけど,replaceも便利
12
Data TransformationRenaming Axis Indexes• インデックスの名前を編集したいとき
• pandas.DataFrame.rename
13
Data TransformationDiscretization and Binning
離散データを扱いたいときある
pandas.cut()
14
Data TransformationDetecting and Filtering Outliers• 外れ値の扱い
15
Data TransformationPermutation and Random Sampling• Permuting: ランダム再整列
• takeを駆使するといい
16
Date TransformationComputing Indicator / Dummy Variables• 統計学モデリングもしくは機械学習のための変換
- 分類別の変数を’dummy’か’indicator’行列にする
- k種類の列があった場合1か0で出来たk列の行列,DataFrame
17
String Manipulation > String Object Methods
18
Argument Descriptioncount 重複してない出現回数
endswith, startswith 引数で終わって(から始まって)たらTruejoin String同士をくっつける
index 文字が最初に見つかった位置を返す.見つからなければErrorを返す.find indexと同じ.見つからなければ-1を返す.rfind 文字が最後に見つかった位置を返す.見つからなければ-1を返す.
replace 置換strip, rstrip, lstrip 空白と改行をなくす(= x.strip)
split 文字列を区切り文字で切ってリストを返す.lower, upper 文字を全部小文字,大文字に変換する.
ljust, rjust, center 引数を与えた数だけ空白を加える
正規表現組み込み関数:reモジュール• パターンマッチング,置換,分割
• re.compileでregex object生成推奨(CPU節約)
19
Argument Description
findall, finditerパターンマッチングしてる文字列を全部返す.
-allはリストで,-iterはイテレータで返す.
match 最初からパターンマッチングあればオブジェクトを,無ければNone
search 途中でもパターンマッチングがあればオブジェクトを返す
split パターンが出るたびに分割する
sub, subn 全部を置換するか,最初のn個だけ置換する
Vectorized string functions in pandasdata.map + lambdaで正規表現適用できるけど,NAで死ぬ
20
Method Descriptioncat 要素ごとに文字列を連結する
contains パターン,正規表現にマッチするかboolean配列を返すcount パターンの出現頻度
endswith, startswith x.endswithやx.startswithと一緒findall パターン,正規表現の全検索
get i番目の要素を取り出すjoin Seriesの各要素に文字列を追加するlen 各要素の文字数
lower, upper x.lower(), x.upper()と一緒match 各要素にre.matchで比較する
pad 空白を片側,もしくは両方追加center pad(side=‘both’)と一緒repeat 値を繰り返す.str.repeat(3) = x * 3replace パターンが一致した箇所を置換
slice Series内の文字列をスライスするsplit 区切り文字,パターンで分割
strip, rstrip, lstrip 空白をなくす
Example: USDA Food Database
21