Python typeシリーズまとめ

Pythonで定義した変数などのオブジェクトの型を調べたいとき、あれどれだっけということがあるのでまとめました。

Pythonには、型を調べたいとき似たようなtype、dtype、dtypes、astypeなどがあり、困惑します。

一つずつどういう場面で用いるか紹介します。

type

Pythonでtypeは、type()として関数で使用します。

type()は、引数に指定した変数などのオブジェクトの型を返します。

主なオブジェクトの型は以下です。

import numpy as np
import pandas as pd
import datetime
inum = 64
fnum = 64.0
str = '64'
date = datetime.datetime(2000,1,1)
array = np.array([0.0,1.0,2.2,2.5])
frame = pd.DataFrame({"name":['tanaka','sato'],"old":[20,19]})
print(type(inum)) #<class 'int'>
print(type(fnum)) #<class 'float'>
print(type(str))  #<class 'str'>
print(type(date)) #<class 'datetime.datetime'>
print(type(array))#<class 'numpy.ndarray'>
print(type(frame))#<class 'pandas.core.frame.DataFrame'>

dtype

Pythonでdtypeは、NumPy配列の要素のデータ型を指しています。

np.array()などでNumpy配列を定義した際、その配列の要素であるデータ型dtypeも定義されます。

基本的には一つのNumpy配列に対して一つのdtypeが設定されていて、すべての要素が同じデータ型になります。

import numpy as np
array=np.array([0.0,1.0,2.2,2.5])
print(array.dtype)
#float64

したがって、Numpy配列ではない変数やオブジェクトにdtypeをするとエラーになります。

array=[1,2,3]
print(array.dtype)
#AttributeError: 'list' object has no attribute 'dtype'

dtypes

Pythonでdtypesは、PandasのDataFrame型で用います。

先ほどでたNumpy配列は、データ型は1つで、複数のデータ型を持つことができません。(本当は出来るが、Pandasを使うことがほとんど)

PandasのDataFrame型では、列ごとに別のデータ型を持つことが出来ます。

したがって、DataFrameでは、列ごとにdtypeを持っています。

列ごとにdtypeを表示するときにdtypesを用います。

DataFrameにdtypeをするとエラーになります。

import pandas as pd
frame = pd.DataFrame({"name":['tanaka','sato'],"old":[20,19]})
print(frame.dtype)

#Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/tanaka/anaconda3/lib/python3.8/site-packages/pandas/core/generic.py", line 5139, in __getattr__
    return object.__getattribute__(self, name)
AttributeError: 'DataFrame' object has no attribute 'dtype'

しかし、列ごとにdtypeを持っているので、以下のように記述することで特定のデータ型を表示出来ます。

import pandas as pd
frame = pd.DataFrame({"name":['tanaka','sato'],"old":[20,19]})
print(frame["name"].dtype) #object
print(frame["old"].dtype) #int64

astype

Pythonでastypeは、データ型を変更するときに用います。

astypeは、astype()として関数で使用します。

使用可能なのは、Numpy配列やDataFrameです。これらの要素のデータ型を変更できます。

Numpy編

import numpy as np

array = np.array([0.0,1.0,2.2,2.5])

array_toStr=array.astype(str)
array_toInt=array.astype(int)
print(array_toStr.dtype) #U32
print(array_toInt.dtype) #int64

U32は、Unicode文字列32文字、int64は、整数型64bitです。

Pandas編

import pandas as pd

frame = pd.DataFrame({"name":['tanaka','sato'],"old":[20,19]})
frame_toStr = frame.astype(str)
print(frame_toStr.dtypes)
'''
name object
old object
dtype: object
'''