在我的应用程序中,我加载了如下结构的文本文件:
非数字列的数量是可变的。目前我将数据加载到DataFrame中,如下所示:
source = pandas.read_table(inputfile, index_col=0)
我想一下子丢弃所有非数字列,而不知道他们的名字或索引,因为这可以读取他们的dtype。这可能与大熊猫有关,还是我必须自己做点什么?
答案 0 :(得分:38)
为避免使用私有方法,您还可以使用,您可以在其中包含或排除所需的dtypes。
在select_dtypes完全相同的事情进入它。
或者在你的情况下,特别是:
source.select_dtypes(['number']) or source.select_dtypes([np.number]
答案 1 :(得分:33)
它是一个私有方法,但它可以解决这个问题: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)
我还有另一种可能的解决方案,即用两行代码删除具有分类值的列,定义一个包含分类值列的列表(第一行),然后使用第二行删除它们。 df是我们的DataFrame
to_be_dropped=pd.DataFrame(df.categorical).columns
df= df.drop(to_be_dropped,axis=1)
删除后的
答案 3 :(得分: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)