熊猫如何检查一个数据框架中的所有列的 dtype?

看来 dtype只为 pandas.DataFrame.Series工作,对吗?是否有一个函数可以同时显示所有列的数据类型?

393846 次浏览

独一无二表单 dtype用于检查单个列的数据类型。复数表单 dtypes用于数据帧,它返回所有列的数据类型。基本上:

对于单个列 :

dataframe.column.dtype

对于所有列 :

dataframe.dtypes

例子 :

import pandas as pd
df = pd.DataFrame({'A': [1,2,3], 'B': [True, False, False], 'C': ['a', 'b', 'c']})


df.A.dtype
# dtype('int64')
df.B.dtype
# dtype('bool')
df.C.dtype
# dtype('O')


df.dtypes
#A     int64
#B      bool
#C    object
#dtype: object

假设 df 是一个熊猫数据框架,然后获取所有列的非空值和数据类型的数量,一次使用:

df.info()

更进一步,我假设您想对这些 dtype 进行处理。 df.dtypes.to_dict()就派上用场了。

my_type = 'float64'


dtypes = dataframe.dtypes.to_dict()


for col_name, typ in dtypes.items():
if (typ != my_type): #<---
raise ValueError(f"Yikes - `dataframe['{col_name}'].dtype == {typ}` not {my_type}")

您会发现 Panda 在比较 NumPy 类和用户提供的字符串方面做得非常好。例如: 甚至像 'double' == dataframe['col_name'].dtype这样的东西,当 .dtype==np.float64

如果你有很多列,你做 df.info()df.dtypes它可能会给你列的整体统计数据,或只是从顶部和底部的一些列喜欢

<class 'pandas.core.frame.DataFrame'>


Int64Index: 4387 entries, 1 to 4387


Columns: 119 entries,
CoulmnA to ColumnZ


dtypes: datetime64[ns(24),
float64(54), object(41)


memory usage: 4.0+ MB

它只给出了24列是 datetime,54列是 float64,41列是 object。

因此,如果希望在一个命令中获得每个列的数据类型,请执行:

dict(df.dtypes)

(这个答案并不直接回答 OP 的问题,但可能是有用的。)

到目前为止,响应依赖于打印的报告或字符串值,因此可能无法防止将来出现问题。

熊猫提供 程序化的方式进行类型检查:

import pandas as pd
from pandas.api.types import is_object_dtype, is_numeric_dtype, is_bool_dtype
df = pd.DataFrame({'A': [1,2,3], 'B': [True, False, False], 'C': ['a', 'b', 'c']})


is_numeric_dtype(df['A'])
>>> True