Pandas 用 object 存储字符串,当对象单列中含多种类型的数据时,该列的数据类型通常为 object。
s = pd.Series([1, 3, 'a', 'foo', 'True'], index=['b', 'c', 'a', 'd', 'e']) print(s.dtype)
object
当与其他类型合并时,会强制向上转型,如从int变为float。
s1 = pd.Series([1, 3, 2, 5, 9.0], index=['b', 'c', 'a', 'd', 'e'])
b 1.0 c 3.0 a 2.0 d 5.0 e 9.0 dtype: float64astype()
s = pd.Series([1, 3, 2, 5, 9.0], index=['b', 'c', 'a', 'd', 'e'])
print(s.astype('float32'))
b 1.0 c 3.0 a 2.0 d 5.0 e 9.0 dtype: float32 float642、Dataframe dtypes
Dataframe 的dtypes 属性用起来很方便,以 Series 形式返回每列的数据类型。
dft = pd.Dataframe({'A': np.random.rand(3),
'B': 1,
'C': 'foo',
'D': pd.Timestamp('20010102'),
'E': pd.Series([1.0] * 3).astype('float32'),
'F': False,
'G': pd.Series([1] * 3, dtype='int8')})
print(dft.dtypes)
A B C D E F G 0 0.336347 1 foo 2001-01-02 1.0 False 1 1 0.664647 1 foo 2001-01-02 1.0 False 1 2 0.450123 1 foo 2001-01-02 1.0 False 1 A float64 B int64 C object D datetime64[ns] E float32 F bool G int8 dtype: objectastype()
dft[['A', 'B']] = dft[['A', 'B']].astype('float64')
print(dft.dtypes)
A float64 B float64 C object D datetime64[ns] E float32 F bool G int8 dtype: object
还可以通过字典指定哪些列转换为哪些数据类型,astype()默认操作为复制数据,就算数据类型没有改变也会复制数据,因此不改变数据类型的列会被保留。但如果先选中列再改变数据类型,则返回的结果只有选中的列。
dft1 = dft[['A', 'B']].astype('float64')
dft2 = dft.astype({'A': 'bool', 'B': 'float64'})
A float64 B float64 dtype: object A bool B float64 C object D datetime64[ns] E float32 F bool G int8 dtype: objectto_numpy().dtype
返回多个数据类型中用的最多的数据类型。
dtypes.value_counts()统计Dataframe中不同数据类型的列数。
print(dft.dtypes.value_counts())
float64 1 int64 1 object 1 datetime64[ns] 1 float32 1 bool 1 int8 1 dtype: int64



