pandasの「型」

投稿者: | 2021-12-02
  • Series   :1つのデータ型 dtype を持つ
  • DataFrame:各列ごとにデータ型 dtype を持つ

目次

型を確認する(df.dtypes)

# 各要素はそれぞれの型をもっていたとしても
# pandasでは文字列を含むSeriesやDataFrameの列は「object型」と表示される
s_object = pd.Series([0, 0.1, 'abc', np.nan])
s_object
# mapを使えば、各要素のtypeを表示可能
# NaNはfloat型になる
s_object.map(type)
# NaNはfloat型だが、strにキャストすると
s_str_astype = s_object.astype(str)
print(s_str_astype)
# NaN(大文字)も文字列 'nan'(小文字)になり
s_str_astype.map(type)
# dropna()でも除外されない
s_str_astype.dropna()
# キャストする前に欠損値の処理をするか
# replace()で'nan'を欠損値に置き換えて処理するか
s_str_astype_nan = s_str_astype.replace('nan', np.nan)
s_str_astype_nan

型を変換する

読み込み時(dtype)

一括変換

pd.read_csv(~, dtype=str)

列ごとに変換

  • 列名がない場合は、{4: str} でも可能 (列番号が4の場合、intを設定)
pd.read_csv(~, dtype={'A':float, 'B':str})

読み込み後(astype)

注意:元のDataFrameは変更されない

一括変換

df.astype(str)

列ごとに変換

df['列A'].astype(int) ← この場合、変換された列だけが戻ってくる

df.astype({'列A':int}) ← 戻り値をDFにしたい場合は、こちらを利用する
# 複数の場合(dict)
df.astype({'A': float, 'C': int8})

インデックスの型を変換したい

df.index.astype(int)