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') # キー指定、後勝ちかを指定
以下広告