python-3.x 如何检查 Dataframe 中所有列的dtype?

j2datikz  于 2023-01-22  发布在  Python
关注(0)|答案(5)|浏览(197)

dtype好像只对pandas.DataFrame.Series有效吧,有没有一个函数可以一次性显示所有列的数据类型?

44u64gxh

44u64gxh1#

单数形式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
sr4lhrrt

sr4lhrrt2#

假设df是一个PandasDataFrame,那么要一次获得所有列的非空值和数据类型的数量,请用途:

df.info()
ldxq2e6h

ldxq2e6h3#

更进一步说,我假设您想对这些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}")

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

rvpgvaaj

rvpgvaaj4#

如果您有很多列,并且您执行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)

qojgxg4l

qojgxg4l5#

(* 此答案没有直接回答OP的问题,但可能有用。*)
到目前为止,响应依赖于打印的报告或字符串值,因此可能无法适应未来的需要。
panda提供了一些编程的类型检查方法:

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

相关问题