【问题标题】:pandas how to check dtype for all columns in a dataframe?pandas 如何检查数据框中所有列的 dtype?
【发布时间】:2017-03-14 04:18:31
【问题描述】:

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

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    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']得到它
    • 你能解释一下为什么 C 列有一个对象类型而不是 str 吗?
    • @StarRider 请参阅this answer 以及pandas documentation,其中提到:“Pandas 使用 object dtype 存储字符串
    • 知道为什么我将对象作为 dtype 吗?
    • 我没有意识到 dtype 的相等性有点模糊。 df.C.dtype 返回 dtype('O'),但 df.C.dtype=='object' 为真。
    【解决方案2】:

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

    df.info()
    

    【讨论】:

    • 正确,但它只会给出摘要。不是所有列的详细信息。
    【解决方案3】:

    为了更进一步,我假设您想对这些 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 时成功。

    【讨论】:

      【解决方案4】:

      如果您有很多列并且您使用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)

      【讨论】:

        猜你喜欢
        • 2014-05-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-03
        • 2021-11-13
        • 1970-01-01
        相关资源
        最近更新 更多