我的应用程序会加载结构如下的文本文件:
- 第一列为非数字列(ID)
- 多个非数字列(字符串)
- 多个数字列(浮点数)
非数字列的数量是可变的。目前,我通过以下方式将数据加载到 DataFrame 中:
source = pandas.read_table(inputfile, index_col=0)
我想一次性删除所有非数字列,而不知道它们的名称或索引,因为可以通过读取其dtype来实现。在pandas中是否可能做到这一点,还是我必须自己想出一些方法?我的应用程序会加载结构如下的文本文件:
非数字列的数量是可变的。目前,我通过以下方式将数据加载到 DataFrame 中:
source = pandas.read_table(inputfile, index_col=0)
我想一次性删除所有非数字列,而不知道它们的名称或索引,因为可以通过读取其dtype来实现。在pandas中是否可能做到这一点,还是我必须自己想出一些方法?在这个帖子中也遇到了相同的问题。
或者在您的情况下,具体地说:
source.select_dtypes(['number']) 或 source.select_dtypes([np.number])
这是一个私有方法,但它可以解决问题: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
这将删除不包含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)
pd.api.types.is_numeric_dtype(df[col])
。 - Uzay Macar