首页 文章

从pandas DataFrame中删除非数字列

提问于
浏览
34

在我的应用程序中,我加载了如下结构的文本文件:

  • 第一个非数字列(ID)

  • 许多非数字列(字符串)

  • 许多数字列(浮点数)

非数字列的数量是可变的 . 目前我将数据加载到DataFrame中,如下所示:

source = pandas.read_table(inputfile, index_col=0)

我想一下子丢弃所有非数字列,而不知道他们的名字或索引,因为这可以读取他们的dtype . 这可能与熊猫有关,还是我必须自己做点什么?

3 回答

  • 31

    要避免使用私有方法,您还可以使用select_dtypes,您可以在其中包含或排除所需的dtypes .

    完全按照this post进入它 .

    或者在你的情况下,特别是:
    source.select_dtypes(['number']) or source.select_dtypes([np.number]

  • 31

    它是一个私有方法,但它可以解决这个问题:source._get_numeric_data()

    In [2]: import pandas as pd
    
    In [3]: source = pd.DataFrame({'A': ['foo', 'bar'], 'B': [1, 2], 'C': [(1,2), (3,4)]})
    
    In [4]: source
    Out[4]:
         A  B       C
    0  foo  1  (1, 2)
    1  bar  2  (3, 4)
    
    In [5]: source._get_numeric_data()
    Out[5]:
       B
    0  1
    1  2
    
  • 2

    我还有另一种可能的解决方案,用于删除具有2行代码的分类值的列,定义具有分类值列(第1行)的列表,并使用第2行删除它们 . df是我们的数据帧

    df在放弃之前:
    df before dropping

    list=pd.DataFrame(df.categorical).columns
      df= df.drop(list,axis=1)
    

    df放弃后:
    df after dropping

相关问题