• home
  • about
  • 全ての投稿
  • ソフトウェア・ハードウェアの設定のまとめ
  • 分析関連のまとめ
  • ヘルスケア関連のまとめ
  • 生涯学習関連のまとめ

pandas

date: 2021-01-03 excerpt: pandasのチートシート

tag: pythonpandasチートシート


pandasのチートシート

概要

  • pandasはアップデートが激しく、インターフェースも変わりやすい。新規機能の追加やシンタックスが覚えるのが難しいなどの課題がある
  • よく使う機能をチートシートとして記す

ファイルの入出力

  • /pandas-io/

pandasのdatetime操作

  • /pandas-dt/

カテゴリ型

  • /pandas-categorical/

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

  • /pandas-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

サンプリング

  • /pandas-sample/

重複の削除

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

  • /pandas-pivot/

pd.get_dummmies

  • /pandas-categorical/

pd.factorize

  • カテゴリ値のインデックスを生成する
codes, uniques = pd.factorize(["a", "b", "a", "c", None])
display(codes) # array([ 0,  1,  0,  2, -1])
  • pd-factorize-example

dataframeのプロパティに代入

  • foobarというカラムがあった場合
df.foobar = df.foobar + 1

groupby

  • /pandas-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する

  • /pandas-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}が得られる


pythonpandasチートシート Share Tweet