Skip to main content

Pandas メモ

DataFrame

py
data = {
"state": ["Ohio", "Ohio", "Ohio", "Nevada", "Nevada", "Nevada"],
"year": [2000, 2001, 2002, 2001, 2002, 2003],
"pop": [1.5, 1.7, 3.6, 2.4, 2.9, 3.2],
}
frame = pd.DataFrame(data)

Series

py
frame['pop']

部分取り出し

  • frame.loc[x, y] : キーで取得
  • frame.iloc[x, y] : 番号で取得

相関(correlation)、共分散(covariance)

py
series1.corr(series2)
series1.cov(series2)

→ 系列データ単位なら値が出る

py
frame.corr()
frame.cov()

→ frame 単位なら matrix で出る

データの読み込み

いろんな方式で取り込める

  • read_csv
  • read_fwf : 文字数区切り
  • read_clipboard
  • read_excel
  • read_hdf
  • read_html
  • read_json
  • read_parquet
  • read_sql
  • read_sql_table

元データに 列名がない場合は引数で明示

py
data = pd.read_csv("a.csv", names=["A", "B", "C", "D"])

index_col でキー列が指定可(複数指定可)。この辺は DataFrame 特有。

py
pd.read_csv("a.csv", names=["A", "B", "C", "D"], index_col=["A", "B"])

データの書き出し

py
data.to_csv('a.csv')

データのクリーニング

N/A か判定

py
series.isna()  # [False, False, True, False, ...]
series.notna() # [True, True, False, True, ...]

isna で判定されるものは、このあたり

  • np.nan (NaN)
  • None (PythonのNone)
  • pd.NaT (日時の欠損)
  • pd.NA (pandas の汎用欠損、nullable dtype 用)

N/A を除外

py
series.dropna()
series[series.notna()] # これでも同じ
series[~series.isna()] # これでも同じ
py
frame.dropna()           # 1個でも nan があるレコードは除外
frame.dropna(how='all') # 全部 nan のレコードだけ除外

N/A を置換 (coalesce)

py
df.fillna(0)
df.fillna({0: -1, 1: 0}) # 列毎に指定する場合
df.ffill() # 前の値で埋める(時系列でよく使う)
df.bfill() # 後ろの値で埋める

重複を除外

py
data.drop_duplicates()
data.drop_duplicates(['k1', 'k2'], keep='last') # キー指定、後勝ちかを指定

以下広告