pandasメモ

create 2021/08/06

Pandas Python 勉強メモ

t f B! P L

要素数をカウントする

df.value_counts()

変数ごとの合計数を見れる。列指定するとその列の中の変数ごとでカウント。

欠損値の合計を見る

all_df.isnull().sum()

欠損値の合計を変数ごとに表示。

データを縦持ちから横持ちに変える

unstack()

縦持ちのデータを横持ちに変換する

文字列を数値に変換する

OneHotEncoding

カテゴリ数に応じて変数ができる。例えばAge_male, Age_femaleのように。

get_dummies()
get_dummies(drop_first=True)

Objectデータを数値データに変換してくれる。

drop_first=True オプションをつけると、1列で判別可能な場合不要な列を消してくれる。(例:女・男だけなので、女の列だけあれば判別できる)

LabelEncoding

変数の数はそのままで数値化できる。変数の選択肢をそのまま数字に置き換えてくれる。(数字の増減に意味は持たない)例えばmale=0, female=1。

欠損値があると動かないので、欠損値を埋めてから使う。fillna()でNaNを'missing'など適当な文字列に差し替えるのもOK。(FareやAgeみたいに他のデータから推測できるものはそれで埋めた方が良さそう。)

# 初期化
le = LabelEncoder()
# fitでpandasの列を学習させる
le = le.fit(all_df['Sex'])
# transformで元の列に適用
all_df['Sex'] = le.transform(all_df['Sex'])

objectの列名を変数にリストで入れておいて、for文で一括処理も可能。

# categories = ['Sex','Embarked','honorific']
for cat in categories:
    le = LabelEncoder()
    if all_df[cat].dtypes == 'object':
        le = le.fit(all_df[cat])
        all_df[cat] = le.transform(all_df[cat])

相関行列

[データフレーム名].corr()

相関行列の作成(相関係数を並べて-1〜1の度合いを見る)。相関係数が1に近いほど正の相関が高く、(比例)、-1に近いほど負の相関(反比例)が高く、0に近いのは相関がない。

データフレームを結合する

all_df = pd.concat([train_df, test_df], sort=False).reset_index(drop=True)

pd.concat() でデータフレームを結合できる。sort=Falseとすると、結合後に行の並びが変えずにできる。オプションなしだと縦方向の結合。

rest_index(drop=True) で、インデックス番号を振り直して、元のインデックス番号は削除する。

横方向の結合

pd.concat([all_df, name_df], axis=1)

axis=1でconcatすると、横方向に結合できる。

欠損値を埋める流れ(汎用性高い版)

# on='Pclass'でall_dfとFare_meanを紐づける。how='left'は左外部結合。デフォルトは内部結合
all_df = pd.merge(all_df, Fare_mean, on='Pclass', how='left')
# Fare列がnullの行にFare_meanを挿入。all_df['Fare'].isnull())で行を指定、'Fare'で列を指定。
all_df.loc[(all_df['Fare'].isnull()), 'Fare'] = all_df['Fare_mean']
# all_dfからFare_meanのデータフレームを削除。列を削除するのでaxis=1。
# dropしないと、欠損値埋めに使った変数がそのまま残る。
all_df = all_df.drop('Fare_mean', axis=1)

左外部結合 (LEFT OUTER JOIN)とは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

欠損値を埋める(一部に適用版)

all_df['alone'].fillna(0, inplace=True)

'alone'列のNaNを0に置き換える処理。inplace=True で、元データに反映される。

Pandasでnan値を削除、穴埋めするfillna、dropnaの使い方

セルを指定する方法二つ

# index番号でセルを指定する
iloc[:,0]
# 行名、列名でセルを指定
loc[(all_df['Fare'].isnull()), 'Fare']

一つのセルの文字列を分割して列として追加する

name_df = all_df['Name'].str.split('[,.]', 2, expand=True)
name_df.columns = ['family_name', 'honorific', 'name']

expand=True で、分割した文字列を列として追加できる。手前の数字は何列で表示するか。過不足あると列にならなかったりNoneで表示されたりする。

df.columns = [文字列] で列名を変更できる。

文字列分割したときは念の為、各列に対してstrip() で前後の空白を消す処理を入れる。

列を指定して不要な要素を削除

非破壊的処理なので、変数を分ければ削除前のデータは残せる。

all_df = all_df.drop(['PassengerId', 'Name', 'name', 'family_name', 'Ticket', 'Cabin'], axis=1)

条件を指定して新しい列を作る

all_df.loc[all_df['family_num'] == 0, 'alone'] = 1

'family_num'が0だったら'alone'列を1にする と言う処理。alone列は自動で作られる。

以上のコードの参照元

Pythonで動かして学ぶ!Kaggleデータ分析入門

このブログを検索

自己紹介

自分の写真
Pythonが趣味です。 勉強のアウトプットを公開したくて、新たにブログ開設しました。 勉強メモのつもりだけど、日常の雑記も書きたい予定。

独学中の身で、個人的な勉強メモも投稿しているので、間違った内容が含まれることもあるかもしれません。
お気づきの際は、問い合わせフォームや、コメント欄からご指摘いただけましたら、大変助かります。

旧ブログ(更新停止中。いずれ統合するかも)ゆーるるのゆるゆる日記

参加中ランキング

PVアクセスランキング にほんブログ村

ブログ アーカイブ

QooQ