53

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

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

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

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

我想一口气删除所有非数字列,而不知道它们的名称或索引,因为这可以读取它们的 dtype。熊猫可以做到这一点,还是我必须自己做饭?

4

4 回答 4

63

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

这个帖子上遇到了完全相同的事情。

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

于 2015-09-04T13:55:33.357 回答
49

这是一个私有方法,但它会解决问题: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
于 2012-10-04T11:41:00.773 回答
0

这将删除不包含 float64 数字的每一列。

df = pd.read_csv('sample.csv', index_col=0)
non_floats = []
for col in df:
    if df[col].dtypes != "float64":
        non_floats.append(col)
df = df.drop(columns=non_floats)
于 2019-03-03T11:43:50.070 回答
0

我还有另一种可能的解决方案,用两行代码删除具有分类值的列,定义一个包含分类值列的列表(第一行)并用第二行删除它们。df 是我们的数据框

df 下降前: df 下降前

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

掉落后的df: 掉落后的df

于 2018-08-03T12:12:20.427 回答