毎回忘れるからメモ。
import
import pandas as pd
結合
基本的な使い方
# 内部結合
data = pd.merge(df_1, df_2, on="COLUMN_A", how="inner")
# 左外部結合
data = pd.merge(df_1, df_2, on="COLUMN_A", how="left")
# 右外部結合
data = pd.merge(df_1, df_2, on="COLUMN_A", how="right")
# 両外部結合(出番あんのかこれ)
data = pd.merge(df_1, df_2, on="COLUMN_A", how="outer")
同一のカラム名が存在した場合の対応
# suffixesで指定する
data = pd.merge(df_1, df_2, on="COLUMN_A", how="inner", suffixes=["", "_df2"])
特定列の抽出
dataframe型のまま列を指定して抽出
df = df[["COLUMN_A"]]
特定列の削除
df = df.drop(columns=["COLUMN_A", "COLUMN_B", "COLUMN_C"])
特定行の抽出
条件指定して抽出
indexで指定可能。queryを使う。
df = df.query("index % 5 == 1")
こっちの方が使いやすい
df = df[(2015 <= df.YEAR) & (df.YEAR <= 2017)]
特定の文字列を含む行を抽出する
df = df[df["KAISAI_NENGAPPI"].str.contains(2018)]
groupby
普通にgroupby
# RACE_CODEごとにグループ化して最大値を取得
max_data = df.groupby("COLUMN_A").max()
# グループ化する値をインデックスにしたくないとき
max_data = df.groupby("COLUMN_A", as_index=False).max()
groupbyして採番したいとき
# KAISAI_NENGAPPIごとに採番してカラムINDEXに入れる
df["INDEX"] = df.groupby("COLUMN_A").cumcount()+1
groupbyしてからの処理
applyとtransformの違いは以下参照。
Pandas の transform と apply の基本的な違い - Qiita
Pythonのデータ分析ライブラリpandasのgroupby オブジェクトに使う transform と apply の違いについて、整理したいと思います。ドキュメンテーションなんでちゃんと書いて…
各列の型を確認
print(df.dtypes)
特定列の型変換(キャスト): astype()
# floatに変換
df["COLUMN_A"] = df["COLUMN_A"].astype(float)
indexのリセット:reset_index
# drop=trueで元のインデックスを削除
df = df.reset_index(drop=True)
列数取得
print(len(df.columns))
行数取得
print(len(p_data))
ソート:sort_values()
df = df.sort_values("COLUMN_A")
昇順、降順:ascending
# True:昇順、False:降順
df = df.sort_values("COLUMN_A", ascending=True)
複数カラムでソート:[]
# カラムを[]で囲む
df = df.sort_values(["COLUMN_A", "COLUMN_B"], ascending=True)
各カラムごとにソート:ascending[]
df = df.sort_values(["COLUMN_A", "COLUMN_B"], ascending=[True, False])
順位付け(ランク)
基本の使い方はデータフレーム全体(列方向)に順位付けがされる。デフォルトでは「各列が昇順で順位付け」され、「同一値(重複値)は平均順位」となり、「文字列はアルファベット順に比較 」される。
df.rank()
昇順、降順はascendingで指定
# accenbing=True で昇順(デフォルト)
df.rank(ascending=True)
# accenbing=False で降順
df.rank(ascending=False)
同一値(重複値)の処理:method
# method="min"で最小値(1位タイとか)
df.rank(method='min')
# method="max"で最大値
df.rank(method='max')
# method="average"で平均値
df.rank(method='average')
groupbyと組み合わせる。
# COLUMN_Aでグループ化し、COLUMN_Bの値を順位付け(降順、同一値は最小値)し、
# 順位をCOLUMN_RANKとして列追加
df["COLUMN_RANK"] = df.groupby("COLUMN_A")[COLUMN_B].rank(ascending=False, method='min')
欠損値(NaN)を別の値で置換する:fillna
# 0で置換
uma_data = uma_data.fillna(0)
列名に特定の文字列が含まれる列名を検索
# "SOHA_TIME"が含まれる文字列を検索
include_cols = [col for col in test_data.columns if 'SOHA_TIME' in col]
コメント