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
'''