【データ分析】Pandasチートシート!
はじめに
みなさんPandas使ってますか!!!使ってるとなんども行う処理の書き方よく忘れますよね…
私がデータ分析でよく使うものをまとめました。目次からご活用ください。
準備
pipインストール
$ pip install pandas
pandasのインポート
import pandas as pd
Pandasデータフレームの変換
データフレーム型への変換
リストから
空のデータフレームを作成、またはほかの型からデータフレームへの変換
引数はオプション
data:データフレームにするリスト型、辞書型等
index:インデックスにするカラム
columns:カラム名を指定
df = pd.DataFrame(data [,index] [,columns])
シリーズから
pd.seriesからpd.dataframeに変換
df = series.to_frame()
データフレーム型の変換
リスト型に変換
df_list = df.to_list()
df_list = df.index.to_list()
df_list = df["column1"].to_list()
辞書型に変換
df_dict = df.to_dict()
入力・出力
csv読み込み
csvからデータフレームを作成。パス以外はオプション。
df = pd.read_csv('data/src/sample.csv',
header=None,
index_col=0,
names=['A', 'C'],
usecols=['a', 'c'],
parse_dates=['date']
)
xlsx読み込み
pd.read_excel()を使う場合は以下をインストールしてインポートが必要
$ pip install openpyxl
import openpyxl
パス以外はオプション。
df = pd.read_excel('data/src/sample.xlsx',
sheet_name='sheet2',
header=5,
index_col=0,
usecols=["B:T"],
)
csv出力
df.to_csv(f"./data.csv", encoding="utf-8", errors="ignore", index=True)
インデックスの処理
df = df.index
特定の列をインデックスとして使用する
df = df.set_index("date")
インデックスをリセットして振り直す
df = df.reset_index("date")
列名変更
renameする方法とcolumnsを指定する方法がある。
renameは辞書型、columnsはリスト型
df = df.rename(columns={"A":"a"})
df.columns = ["a","b"]
columns_list = df.columnsでカラム名をリストで取得することもできます。
追加
列追加
df["column"] = 1
df.insert(1, "column", "str")
削除
特定列の削除
df = df.drop(sunet=['A'], axis=1)
特定行の削除
df = df.drop(sunet=['A'], axis=0)
欠損列、欠損行の削除
df = df.dropna(axis=1, how = 'all')
df = df.dropna(axis=0, how = 'any')
重複行削除
df.drop_duplicates(subnet="date", keep"first", inplace=True)
型変換
datetime型に変換する場合。formatはオプション
df[date] = pd.to_datetime(df[date], format="%Y%m%d")
float型などに帰る場合
df = df.astype({'columns1': object, 'columns2': 'float64', 'columns3': 'category'})
型を確認する場合
df.dtypes
抽出
行抽出
空もしくは空ではないの行の抽出
「 | 」でつなぐことでor、「&」でand
df = df[df[column1].isnull()]
df = df[df[column1].notnull() | df[column2]notnull()]
df = df[df[column1].notnull() & df[column2]notnull()]
数値
df = df[df[column1] > 10]
文字列
df = df[df[column1].isin(["a"])]
df = df[df[column1].str.contains("a")]
列抽出
df = df[1:3]
df = df.loc[:,["column1"]]
欠損値埋め
df["column1"] = df["column1"].ffill()
df["column1"] = df["column1"].bfill()
結合
縦結合
結合するデータフレームはリストに格納する。
df = pd.concat([df1, df2], ignore_index=False)
マージ
df = pd.merge(df_a, df_b, on=["date"], how="left")
df = pd.merge(df_a, df_b, on=["date"], how="outer")
ジョイン
df = df_a.join(df_b, how="left")
並び替え
行の並び替え
df.sort_values("date", ascending=False, ignore_index=True)
df.sort_values(["column1",”column2”])
df.sort_index(axis=1)
列の並び替え
df = df.reindex(index={‘column1’,’column3’,’column2’})
グループ化
集計
特定の列でグループ化して算出
sum:合計
mean:平均
apply:自分で定義した関数で算出
df = df.groupby(df["date"]).mean()
df = df.groupby(df["date"]).apply(lambda x: x.count())
aggを用いると特定の列に対してそれぞれの計算が可能。
df = df.groupby(df.index).agg({
"column1": "sum",
"column2": "mean",
"column4": lambda x: x.count(),
})
月別集計
Y:1年 M:1か月 D:1日 10h:10時間 10min:10分 10s:10秒
MSのようにSを付けると集計する際にindexの日付を月初になる。(例:1月1日)
df.resample("MS").ave()
df.resample('W').apply(list)
resampleもグループ化の時と同様にaggが使用可能
df.resample("MS").agg({
"column1": "sum",
"column2": "mean",
"column3": "ave",
"column4": lambda x: x.count(),
})
条件に応じた処理
df["column1"] = np.where(df["column2"]==1,True,False)
列のデータ処理
datetime型の丸め
df["datetime_round"] = df["datetime"].dt.floor("min")
df["weekday"] = df["date"].dt.weekday
文字列の置換
df["column"] = df["column"].str.replace("\n","")
転置
ret = df.melt(id_vars=[""], var_name="")
df = ret.pivot(index[""],columns="",value="value").rest_index()
その他
複製
df_cp = dfとすると参照渡しになってしまう
参照渡ししたくない場合は.copyメソッドを使用する。
df_cp = df.copy(deep=True)
列の最大値を取得
max = df["column"].max()
データフレームが空か確認
dfが空ならばTrueが返されます。
df.empty
移動平均
指数平滑移動平均
df[] = df[].ewm(5).mean.shift()



ディスカッション
コメント一覧
まだ、コメントがありません