pandas如何检查数据框中所有列的dtype?

use*_*495 50 python dataframe pandas

似乎dtype只适用于pandas.DataFrame.Series,对吗?是否有一次显示所有列的数据类型的功能?

Psi*_*dom 86

单数形式dtype是用来检查数据类型为一列.和复数形式dtypes是,其为所有列返回数据类型的数据帧.实质上:

对于单个列:

dataframe.column.dtype
Run Code Online (Sandbox Code Playgroud)

对于所有列:

dataframe.dtypes
Run Code Online (Sandbox Code Playgroud)

示例:

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
Run Code Online (Sandbox Code Playgroud)

  • 如果你想要所有非数字/分类列,你可以通过`df.dtypes[df.dtypes != 'int64'][df.dtypes != 'float64']` (5认同)
  • @StarRider参见[这个答案](/sf/ask/1471305811/)以及[`pandas`文档](https:// /pandas.pydata.org/pandas-docs/stable/getting_started/basics.html#dtypes)其中提到:“_Pandas 使用对象 dtype 来存储字符串_” (4认同)
  • 您能否解释一下为什么列C具有对象类型而不是str? (2认同)
  • 我没有意识到数据类型的相等性有点模糊。`df.C.dtype` 返回 `dtype('O')`,但 `df.C.dtype=='object'` 为 true。 (2认同)

Mum*_*Ali 13

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

df.info()
Run Code Online (Sandbox Code Playgroud)

  • 正确,但它只会给出摘要。不是所有列的详细信息。 (3认同)

Has*_*tax 13

更进一步,我假设您实际上想对这些数据类型做一些事情。 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}")
Run Code Online (Sandbox Code Playgroud)

您会发现 Pandas 在比较 NumPy 类和用户提供的字符串方面做得非常好。例如:即使是这样的事情,'double' == dataframe['col_name'].dtype当 时也会成功.dtype==np.float64


noc*_*mbi 11

这个答案并没有直接回答OP的问题,但可能有用。

到目前为止,响应依赖于打印的报告或字符串值,因此可能无法适应未来的情况。

pandas 提供了用于类型检查的编程方式

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
Run Code Online (Sandbox Code Playgroud)


Pal*_*ine 8

如果您有很多列,并且您这样做了,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
Run Code Online (Sandbox Code Playgroud)

它只是给出了 24 列是日期时间,54 列是 float64,41 列是对象。

因此,如果您希望在一个命令中获取每一列的数据类型,请执行以下操作:

dict(df.dtypes)