【发布时间】:2017-03-14 04:18:31
【问题描述】:
dtype 似乎只适用于 pandas.DataFrame.Series,对吧?有没有一次显示所有列的数据类型的功能?
【问题讨论】:
dtype 似乎只适用于 pandas.DataFrame.Series,对吧?有没有一次显示所有列的数据类型的功能?
【问题讨论】:
singular 形式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.dtypes[df.dtypes != 'int64'][df.dtypes != 'float64']得到它
pandas documentation,其中提到:“Pandas 使用 object dtype 存储字符串”
df.C.dtype 返回 dtype('O'),但 df.C.dtype=='object' 为真。
假设 df 是一个 pandas DataFrame 然后一次获取所有列的非空值和数据类型的数量:
df.info()
【讨论】:
为了更进一步,我假设您想对这些 dtype 做一些事情。
df.dtypes.to_dict() 派上用场了。
my_type = 'float64'
dtypes = dataframe.dtypes.to_dict()
for col_nam, 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 时成功。
【讨论】:
如果您有很多列并且您使用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 列是对象。
因此,如果您想在一个命令中获取每一列的数据类型,请执行以下操作:
dict(df.dtypes)
【讨论】: