关于python:从pandas DataFrame中删除非数字列

Drop non-numeric columns from a pandas DataFrame

本问题已经有最佳答案,请猛点这里访问。

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

  • 第一个非数字列(ID)
  • 一些非数字列(字符串)
  • 若干数值列(浮点数)

非数字列的数目是可变的。当前,我将数据加载到这样的数据框中:

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

我想一次性删除所有非数字列,而不知道它们的名称或索引,因为这可以读取它们的数据类型。这对熊猫来说是可能的还是我必须自己做饭?


为了避免使用私有方法,您还可以使用select_dtypes,其中可以包含或排除所需的数据类型。

在这篇文章中碰到的是同一件事。

或者在您的情况下,具体来说:source.select_dtypes(['number']) or source.select_dtypes([np.number]


这是一个私有方法,但它可以做到这一点:source.u get u numeric u data()。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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行代码的类别值的列,定义具有类别值的列(第一行)的列表,并使用第二行删除它们。df是我们的数据框架

下降前测向:df before dropping

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

下降后测向:氧化镁


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

1
2
3
4
5
6
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)