pandasのチートシート
概要
- pandasはアップデートが激しく、インターフェースも変わりやすい。新規機能の追加やシンタックスが覚えるのが難しいなどの課題がある
- よく使う機能をチートシートとして記す
ファイルの入出力
pandasのdatetime操作
カテゴリ型
multiindexのハンドリング
- groupbyなどを操作を行うとindexが深い状態のmultiindexになる
- flattenするには以下の操作が必要
df.columns = df.columns.to_flat_index()
文字列を置換する
df[col].str.replace("src-text", "tgt", regex=True)
httpを取り除く
df[col].str.replace("http\S+", "", regex=True)
drop
- columnのドロップやindexのドロップを行える
columnをドロップする例
df.drop(columns=["col-name0", "col-name1"], inplace=True)
query
新しいカラムへの値の代入
- assign関数を使う(inplaceできない)
- 新たに設定したいカラム名にアクセスして代入
- pd-assign-example
df = df.assign(col_test=[x*2 for x in range(1000)])
または
df["col_test"] = [x*2 for x in range(1000)]
~
演算子
- 否定のこと
pd.Series([True, False])
->[True, False]
~pd.Series([True, False])
->[False, True]
tqdm
- 最初に
tqdm.pandas()
を実行する
from tqdm import tqdm
tqdm.pandas()
df.progress_apply(func)
値のフレクエンシーを計算する
value_counts
関数を用いることができる.to_frame()
でデータフレームになる.to_dict()
で辞書型になる
df = pd.DataFrame({"a": [1,2,3,1,4,3,3]})
df["a"].value_counts().to_frame()
a
3 3
1 2
2 1
4 1
特定のindex値、カラム名がわかっている時にその値にアクセスする
for index in df.index:
print(index, df.at[index, "a"])
- “a”; カラム名
- pandas-at
サンプリング
重複の削除
df.drop_duplicates(subset=["column_name"], inplace=True)
merge
- テーブルを複数結合するときはチェーンできる
pd.merge(a, b, on=["key"], how="left").merge(c, on=["key"], how="left")
- suffixesを指定することで余分なsuffixを抑制できる
pd.merge(a, b, suffixes=("", "_right"), on=["key"], how="left")
- マージ時のキーの名前が異なっている場合
pd.merge(a, b, left_on="left_key", right_on="right_key", how="left")
reset_index
- インデックスの貼り直し
- groupbyしたときや、ソートでindexを貼り直したいときなど
drop=True
オプションで古いindexを捨てることができる
df.reset_index(drop=True, inplace=True)
pivot
pd.get_dummmies
pd.factorize
- カテゴリ値のインデックスを生成する
codes, uniques = pd.factorize(["a", "b", "a", "c", None])
display(codes) # array([ 0, 1, 0, 2, -1])
dataframeのプロパティに代入
- foobarというカラムがあった場合
df.foobar = df.foobar + 1
groupby
尖度・歪度・stdを計算する
- targetは計算対象のカラム名
agg_df = df.groupby(["foo", "bar", ...]) \
.agg(
mean=(target, "mean"),
median=(target, "median"),
skew=(target, "skew"),
kurtosis=(target, pd.DataFrame.kurt),
std=(target, "std"))
seriesの値をclipする
特定のindexの値をupdate
- 特定の値が一定以下の検索を行いindexの値を取り出し、値を3倍にする
index = df[df["First Tooltip"] <= 100].index
df.loc[index, "Period"] = df.loc[index, "Period"] * 3
dataframeに対するapply
apply
関数でaxis=1
の引数を与えると行
に対して適応できる
df.apply(something_function, axis=1)
dropwhile(初めてtrueになるまでデータを捨てる)
- twitterのデータで例示する
- scoreが1以上になるまでデータを捨てる
import pandas as pd
df.sort_values(by=["tweet_date"], inplace=True)
dropwhiles = []
flg = False
for score in sub["score"]:
if score >= 1.0:
flg = True
dropwhiles.append(flg)
df.drop(dropwhiles, axis=0, inplace=True) # Falseのindexをdropする
symmetric_difference(対称差)を計算する
- 積集合を和集合から引いた集合を対称差という
s1 = pd.Series([1,2,3,4,5])
s2 = pd.Series([2,3,4])
set(s1).symmetric_difference(s2) # {1, 5}が得られる