【python】pandasを使ってみる。

インポート

import pandas as pd

csvファイルを読み込んでDataFrameにする。

df = pd.read_csv(filepath)

欠損値の削除

DataFrame.dropna(axis=0, how="any", thresh=None, subset=None, inplace=False)

import numpy as np


# Toy dataset
df = pd.DataFrame([[np.nan, 2, np.nan, 0],
                   [3, 4, np.nan, 1],
                   [np.nan, np.nan, np.nan, 5]],
                   columns=list('ABCD'))

DataFrameの中身

     A    B   C  D
0  NaN  2.0 NaN  0
1  3.0  4.0 NaN  1
2  NaN  NaN NaN  5

欠損値を含む列を取り除く

df = df.dropna(axis=1)
   D
0  0
1  1
2  5

値が全て欠損値の列を取り除く

df = df.dropna(axis=1, how="all")
     A    B  D
0  NaN  2.0  0
1  3.0  4.0  1
2  NaN  NaN  5

欠損値を含む行を取り除く

df = df.dropna()
Empty DataFrame
Columns: [A, B, C, D]
Index: []

DataFrameに欠損値があるか確認する

df.isnull().any()

DataFrameをcsvファイルに書き込む

df.to_csv(filepath, index=False)

正規化

# Toy dataset
df = pd.DataFrame([[0, 20, 13, 0.1],
                   [3, 40, 12, 1.2],
                   [2, 22, 17, 0.5]],
                   columns=list('ABCD'))

min max normalization

df = (df-df.min()) / (df.max()-df.min())
          A    B    C         D
0  0.000000  0.0  0.2  0.000000
1  1.000000  1.0  0.0  1.000000
2  0.666667  0.1  1.0  0.363636

列を指定して正規化する

df["C"] = (df["C"]-df["C"].min()) / (df["C"].max()-df["C"].min())

mean normalization

df = (df-df.mean()) / df.std()
          A         B         C         D
0 -1.091089 -0.665750 -0.377964 -0.898027
1  0.872872  1.149932 -0.755929  1.077632
2  0.218218 -0.484182  1.133893 -0.179605

列を指定して正規化する

df["C"] = (df["C"]-df["C"].mean()) / df["C"].std()

複数の列を指定して正規化

CとDの列をmin max normalizationする。

columns = ["C", "D"]
df[columns] = df[columns].apply(lambda x: (x-x.min()) / (x.max()-x.min()))
   A   B    C         D
0  0  20  0.2  0.000000
1  3  40  0.0  1.000000
2  2  22  1.0  0.363636