Drop non-numeric columns from a pandas DataFrame
本问题已经有最佳答案,请猛点这里访问。
在我的应用程序中,我加载的文本文件结构如下:
- 第一个非数字列(ID)
- 一些非数字列(字符串)
- 若干数值列(浮点数)
非数字列的数目是可变的。当前,我将数据加载到这样的数据框中:
1 | source = pandas.read_table(inputfile, index_col=0) |
我想一次性删除所有非数字列,而不知道它们的名称或索引,因为这可以读取它们的数据类型。这对熊猫来说是可能的还是我必须自己做饭?
为了避免使用私有方法,您还可以使用select_dtypes,其中可以包含或排除所需的数据类型。
在这篇文章中碰到的是同一件事。
或者在您的情况下,具体来说:
这是一个私有方法,但它可以做到这一点: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是我们的数据框架
下降前测向:。
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) |