1、Series
dtype
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: float64
astype()
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
float64
2、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: object
astype()
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: object
to_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