pandas(パンダス、パンダ)
  ・時系列のデータ操作やデータ構造を変更するなど、テーブルデータを取り扱うライブラリ
必要なデータを精査する前処理などに用いる。
  ・numpy を利用し、さらにAPIを拡張し、使いやすくなっている。
pandasの抽象化や関数呼び出しのオーバーヘッドが発生する。
  ・Series (シリーズ)
最も基本的なオブジェクト
NumPyのndarrayの一次元配列の拡張版
シリーズは1次元の配列のようなデータ構造
シリーズは様々な型のデータを持つ。
データに関連付けられたインデックスを持つ。
Series()メソッドを使用してシリーズを作成
pd.Series(データ[, index=インデックス])
1セットのデータを格納、辞書形式で複数繋ぐとDataFrameオブジェクト
  ・DataFrame (データフレーム)
基本構造(2次元の大きさが変更できる表形式データ)
シリーズを値にもつ辞書のような構造
データフレームは様々な型のデータを持つ。
各次元(行と列)方向にはラベリングされた軸(axes)が存在
行と列の両方にインデックスを持つ。
各次元(行と列)方向に数学的な操作を行える。
パラメータ名
data (省略可)初期値None
index (省略可)初期値None(RangeIndexによって0から順にラベリング)
columns (省略可)初期値None(RangeIndexによって0から順にラベリング)
dtypes (省略可)初期値None 使用するデータ型を指定
copy (省略可)初期値False
DataFrame()メソッドを使用してデータフレームを作成
pd.DataFrame(データ[, index=行インデックス][, columns=列インデックス])
pd.DataFrame() 空のデータフレーム

部分作成
  df_name = pd.DataFrame()
  df_default = pd.read_csv(default_src, index_col=0,
      names=['name','age', 'state', 'point', 'point_f2'],
      dtype = {'name':'object','age':'Int64', 'state':'object', 'point':'Int64', 'point_f2':'int64'})
  df_name = df_default[['name']]
  df_name = df_name.reset_index(drop=True) # reset_index
  df_name = df_name.drop_duplicates(keep='first') #同名は最初を残す
  df_name = df_name.sort_values('name')   df_name = df_name.reset_index(drop=True)
  list = ["その他"] # その他追加
  df_append = pd.DataFrame(data=[list], columns=["name"])
  df_name = pd.concat([df_name, df_append], ignore_index=True, axis=0)
  df_name.to_csv('./data/name.csv', header = False)

与えられたデータは Series か DataFrame か
  ・isinstance 関数(パラメータ 2 個)
if isinstance(pd_data, pd.Series)
True 時の作業
  ・type 関数もあり

drop
  df_default = pd.read_csv(default_src, index_col=0,
      names=['name','age', 'state', 'point', 'point_f2'],
      dtype = {'name':'object','age':'Int64', 'state':'object', 'point':'Int64', 'point_f2':'int64'})
  df_default = df_default.drop(['point', 'point_f2'], axis=1)

dtypes
  df_default.dtypes

複数列の重複削除
df.drop_duplicates(subset=['列1', '列2'])
大文字と小文字は区別

インデックス変更
  ・インデックスリストを 列 1 に変更
df.set_index(1, inplace=True)
  ・インデックスに 列 2 を追加
df.set_index(2, append=True)

インデックス参照
  ・位置指定
単独の要素 at iat
単独及び複数の素 loc iloc
iat iloc は行番号、列番号
df.loc['xxx', 'yyy']
df.iloc[3, 4]
  ・インデックス名取得
df.index
df.index[3]
Index名をカラム名に転置して取得
  ・インデックスがダブっていればリスト出力
リスト出力された物をDataFrame(リスト)メソッドを使用して再度データフレームを作成

型変換(キャスト)
  ・astype()メソッド
df.astype(str) (全体を一括で変換)

読み込みソート書き込み
  #読み込み、ageとpointでソート、書き込み
  df_default = pd.read_csv(default_src, index_col=0,
      names=['name','age', 'state', 'point', 'point_f2'],
      dtype = {'name':'object','age':'Int64', 'state':'object', 'point':'Int64', 'point_f2':'int64'})
  df_default = df_default.sort_values(['age', 'point'], ascending=[True, False])
  df_default.to_csv('./data/new_data.csv', header = False)

pandas←csv
  ・X = pd.DataFrame(x_csv, index_col=[0, 1, 4], header=None)
  ・必用ならば インデックス変更

pandas←list
  ・X = pd.DataFrame(リスト)
  ・必用ならば インデックス変更

pandas→numpy
  ・全てのデータを同じ型に整えてからnumpyに渡す。
  ・一部の要素だけ抜き出してnumpyの演算を行う。
  ・要素のdtypeがint64の場合は NumPy変換時に pd.NA があると float64 に変換

DataFrame と Series を連結
  ・DataFrame に Series を追加
df = pd.concat([df, pd.DataFrame([sr])], ignore_index=True)
Serise を DataFrame に変換して連結
append() は将来なくなる予定

Series完全一致
  ・ 参考

shape
  df_default.shape

追加(30%減)
  df_default = df_default.assign(point_2 = ((df_default[['point']]) * 0.7).astype('int'))

追加 切り出した文字列を新規カラム
  ・2文字切り出し
df['new_name'] = df['name'].str[:2]

追加 Series
  ・Seriesで要素を渡す
df = pd.DataFrame(data={'列2': pd.Series([50, 60, 80],index=['行1', '行2', '行4'])})
空のセルを作ることができる。

学習例
  ・boston_house_prices
  ・手書き文字
  ・WineQuality