从pandas DataFrame中删除非数字列

Ein*_*nar 42 python pandas

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

  • 第一个非数字列(ID)
  • 许多非数字列(字符串)
  • 许多数字列(浮点数)

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

source = pandas.read_table(inputfile, index_col=0)
Run Code Online (Sandbox Code Playgroud)

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

sap*_*ico 44

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

关于完全相同的事情,在这篇文章中进入它.

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

  • 我认为这比使用私有方法更好.也许你应该添加问题的直接答案,即:source.select_dtypes(['number'])或source.select_dtypes([numpy.number]) (2认同)

Wou*_*ire 37

它是一种私有方法,但它可以解决这个问题: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
Run Code Online (Sandbox Code Playgroud)

  • 谢谢!在熊猫中使用“私有方法”有什么注意事项吗?或者,为什么这是私有的?(如果你建议,我可以提出一个新问题。) (2认同)
  • 通常,私有方法的添加/删除/更改 api 不被视为(类)api/行为更改。换句话说,被认为是向后兼容的新版本的 Pandas 可以例如删除私有方法。我相信 _get_numeric_data() 主要用于支持绘图函数/方法。如果你觉得这是一个有用的方法,你可以在 github 上做一个功能请求,要求让它成为公共 api 的一部分。 (2认同)