【问题标题】:Find all columns of dataframe in Pandas whose type is float, or a particular type?在 Pandas 中查找类型为浮点数或特定类型的所有数据框列?
【发布时间】:2014-03-10 07:28:40
【问题描述】:

我有一个数据框 df,它有一些 float64 类型的列,而其他的则是对象。由于混合性质,我不能使用

df.fillna('unknown') #getting error "ValueError: could not convert string to float:"

因为错误发生在类型为 float64 的列上(多么误导的错误消息!)

所以我希望我可以做类似的事情

for col in df.columns[<dtype == object>]:
    df[col] = df[col].fillna("unknown")

所以我的问题是是否有任何这样的过滤器表达式可以与 df.columns 一起使用?

我想,或者,不那么优雅,我可以这样做:

 for col in df.columns:
        if (df[col].dtype == dtype('O')): # for object type
            df[col] = df[col].fillna('') 
            # still puzzled, only empty string works as replacement, 'unknown' would not work for certain value leading to error of "ValueError: Error parsing datetime string "unknown" at position 0" 

我也想知道为什么在上面的代码中用“未知”替换''代码对某些单元格有效,但由于单元格失败,错误为“ValueError:错误解析日期时间字符串“未知”在位置0 "

非常感谢!

【问题讨论】:

    标签: python pandas dataframe data-cleaning


    【解决方案1】:

    您可以使用 dtypes 属性查看所有列的 dtype:

    In [11]: df = pd.DataFrame([[1, 'a', 2.]])
    
    In [12]: df
    Out[12]: 
       0  1  2
    0  1  a  2
    
    In [13]: df.dtypes
    Out[13]: 
    0      int64
    1     object
    2    float64
    dtype: object
    
    In [14]: df.dtypes == object
    Out[14]: 
    0    False
    1     True
    2    False
    dtype: bool
    

    访问对象列:

    In [15]: df.loc[:, df.dtypes == object]
    Out[15]: 
       1
    0  a
    

    我认为使用起来最明确(我不确定 inplace 是否可以在这里使用):

    In [16]: df.loc[:, df.dtypes == object] = df.loc[:, df.dtypes == object].fillna('')
    

    这么说,我推荐你使用NaN for missing data

    【讨论】:

      【解决方案2】:

      这样更简洁:

      # select the float columns
      df_num = df.select_dtypes(include=[np.float])
      # select non-numeric columns
      df_num = df.select_dtypes(exclude=[np.number])
      

      【讨论】:

      • 仅供参考,.select_dtypes 于 0.14.1 发布,IIRC @Andy soln 在此之前
      【解决方案3】:

      正如@RNA 所说,您可以使用pandas.DataFrame.select_dtypes。使用问题示例的代码如下所示:

      for col in df.select_dtypes(include=['object']).columns:
          df[col] = df[col].fillna('unknown')
      

      【讨论】:

        猜你喜欢
        • 2018-05-25
        • 1970-01-01
        • 1970-01-01
        • 2020-09-08
        • 1970-01-01
        • 1970-01-01
        • 2018-02-23
        • 2018-12-09
        • 2016-10-26
        相关资源
        最近更新 更多