項目
- 欠損値に対する処理
- 行・列名の変更
- 行・列名の取得
- dfをcsvとして出力
- 行・列の除去
- 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")