Pandas df操作(欠損値/行列名変更・取得/csv出力/行・列の除去/結合)


項目

  1. 欠損値に対する処理
  2. 行・列名の変更
  3. 行・列名の取得
  4. dfをcsvとして出力
  5. 行・列の除去
  6. dfの結合

1.欠損値に対する処理

欠損値の除外

python
#全ての値が欠損しているものの除外
#how = "all"
#欠損値を含む行の削除
df.dropna(how = "all")

#欠損値を含む列の削除
df.dropna(how = "all", axis = 1)

#行、列共に削除したい場合はそれぞれ適用する
df.dropna(how='all').dropna(how='all', axis=1)

#-----------------------------------
#欠損値が一つでも含まれるものの処理
#how = "any"
#行の削除
df.dropna(how = "any")

#欠損値を含む列の削除
df.dropna(how = "any", axis = 1)

欠損値の置き換え

python
#欠損値の置き換え
#fillna()
#共通の値に置き換え
df.fillna("num")

#列ごとに異なる値で置き換え
#引数で辞書を使う
df.fillna({"id":0, "name":"null"})

#-----------------------------------

#平均値、中央値、最頻値での置き換え
#平均値
#下記の場合は全てを平均値で、列ごとは列指定で
df.fillna(df.mean())

#中央値で
df.fillna(df.median())

#最頻値で
df.fillna(df.mode().iloc[0])

#前後の値で置き換え
#前の値をいれる
df.fillna(method='ffill')

#後ろの値をいれる
df.fillna(method='bfill')

欠損値があるものの抽出

python
#欠損値がある列や行を取り出す
#isnull()
#欠損値の含まれているレコード
df[df['カラム'].isnull()]

#特定の行の欠損値があるカラム
df.iloc[0].isnull()

#欠損値が一つでも含まれる行・列
#isnull().any()
#axis=1で行、axis=0で列
df2.isnull().any(axis=1)

2.行・列名の変更

任意の行・列名変更

python
#dfが再発行される
#カラムの変更
#rename(columns={"元の名前":"変更後の名前})
#レコードの変更
#rename(index={"元の名前":"変更後の名前})
df.rename(columns={'A': 'new_A'}, index={'ONE': 'new_one'})

複数の行・列名変更

python
#複数の変更
df.rename(columns={'A': 'new_A', 'C': 'new_one'})

3.行・列名の取得

カラム名

リストで取得

python
df.columns.values()

行名

python
df.index.values()

4.dfをcsvとして出力

python
#to_csv("ファイル名", sep="区切り文字", index="True or False"(行名を出すか、Trueなら出力), encoding="文字コード")
df.to_csv("csvファイル名", sep=",")

5.行・列の除去

カラム・レコードが除去された新しいdfを出力

python
#drop("カラム名", axis=1)
#またはdrop(columnns=["~~~"], index=["~~~"])
df_new = df.drop("column", axis=1)

#複数の場合は引数を行列に
df_new = df.drop(["column","column_2"], axis=1)

元となるdfから直接除去

python
#del df["~~~"]
del df[["column","cplumn_2"]]

6.dfの結合

内部結合

python
#pd.merge(df_1, df_2, on="keyのカラム")
pd.merge(df_1, df_2, on="id")

#カラム名が違う場合
pd.merge(df_1, df_2, left_on='id', right_on='id_2')
#これでやるとkeyにした二つのカラムがそのまま残るので、この後にdropなどで除去しておく
#こんな感じで一気にやってもOK
pd.merge(df_1, df_2, left_on='id', right_on='id_2').drop(columns='id_2')

#-----------------------------------

#引数にしたいカラムが複数ある場合
pd.merge(df_1, df_2, on=["id","name"])

#複数かつ違う場合
pd.merge(df_1, df_2, left_on=["id","name"], right_on=["id_2","name_2"]).drop(columns=["id_2","name_2"])

結合方法の指定

python
#内部結合
#how="inner"
pd.merge(df_1, df_2, on="id", how="inner")

#外部結合
#how="outer"
#値が存在しない場合はNaNになる
pd.merge(df_1, df_2, on="id", how="outer")