Pandas如何检查数据框中所有列的数据类型?

203

看起来dtype只对pandas.DataFrame.Series起作用,是吗?有没有一种可以同时显示所有列数据类型的函数?

6个回答

317

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

8
如果您想获取所有非数字/分类列,可以通过以下方法获得: df.dtypes[df.dtypes != 'int64'][df.dtypes != 'float64'] - nishant
3
为什么C列是对象类型而不是字符串? - Star Rider
3
@StarRider 请参考这个答案以及pandas文档,其中提到:“Pandas使用对象dtype来存储字符串”。 - call-in-co
1
我为什么会有对象作为数据类型? - WJA
2
我之前没有意识到数据类型的相等性有些模糊。df.C.dtype 返回 dtype('O'),但是 df.C.dtype=='object' 是正确的。 - Teepeemm

28

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

```df.info()```

df.info()

7
可以,但它只会提供摘要,不会详细列出所有的内容。 - Nabin

10
更进一步,我假设你实际上想要对这些数据类型进行某些操作。 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 时也会成功。


10
这个答案并没有直接回答 OP 的问题,但可能会有用。
到目前为止的回答都依赖于打印报告或字符串值,因此可能不具备未来兼容性。 pandas 提供了编程方式进行类型检查的工具:utilities
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

1
一个有用的补充!但是你的链接出现了404错误,能否更新一下?@nocibambi - codeananda

7
如果你有很多列,执行 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个日期时间列、54个float64列和41个object列的数据类型信息。

如果您想要一条命令获取每列的数据类型,请执行以下操作:

dict(df.dtypes)


0

您还可以通过使用 dataframe_name.column_name 间接查看它,该方法会显示列值以及其数据类型。

例如:

import pandas as pd
data = {"strings" : ["a","b","c"], "ints" : [1,2,3]}
df = pd.DataFrame(data)
print(df.strings)
print("------------")
print(df.ints)

这将输出:

0    a
1    b
2    c
Name: strings, dtype: object
------------
0    1
1    2
2    3
Name: ints, dtype: int64

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接