df
isNumeric = is_numeric(df)
def is_type(df, baseType): import numpy as np import pandas as pd test = [issubclass(np.dtype(d).type, baseType) for d in df.dtypes] return pd.DataFrame(data = test, index = df.columns, columns = ["test"]) def is_float(df): import numpy as np return is_type(df, np.float) def is_number(df): import numpy as np return is_type(df, np.number) def is_integer(df): import numpy as np return is_type(df, np.integer)
调整这个答案,你可以这样做
df.ix[:,df.applymap(np.isreal).all(axis=0)]
这里,np.applymap(np.isreal)显示数据帧中的每个单元格是否都是数字,而.axis(all=0)检查一列中的所有值是否都为True,并返回一系列可用于索引所需列的布尔值。
np.applymap(np.isreal)
.axis(all=0)
你可以使用DataFrame的select_dtypes方法。它包括include和exclude两个参数。所以isNumeric看起来是这样的:
select_dtypes
numerics = ['int16', 'int32', 'int64', 'float16', 'float32', 'float64'] newdf = df.select_dtypes(include=numerics)
你可以使用未记录的函数_get_numeric_data()来只过滤数字列:
_get_numeric_data()
df._get_numeric_data()
例子:
In [32]: data Out[32]: A B 0 1 s 1 2 s 2 3 s 3 4 s In [33]: data._get_numeric_data() Out[33]: A 0 1 1 2 2 3 3 4
请注意,这是一个“私有方法”(即,一个实现细节),将来可能会更改或完全删除。慎用。
df.select_dtypes(exclude = ['object'])
更新:
df.select_dtypes(include= np.number)
或者是熊猫的新版本
df.select_dtypes('number')
这是另一个简单的代码,用于在pandas数据帧中查找数字列,
numeric_clmns = df.dtypes[df.dtypes != "object"].index
简单的一行回答,创建一个只有数字列的新数据框架:
df.select_dtypes(include=np.number)
如果您想要数值列的名称:
df.select_dtypes(include=np.number).columns.tolist()
完整的代码:
import pandas as pd import numpy as np df = pd.DataFrame({'A': range(7, 10), 'B': np.random.rand(3), 'C': ['foo','bar','baz'], 'D': ['who','what','when']}) df # A B C D # 0 7 0.704021 foo who # 1 8 0.264025 bar what # 2 9 0.230671 baz when df_numerics_only = df.select_dtypes(include=np.number) df_numerics_only # A B # 0 7 0.704021 # 1 8 0.264025 # 2 9 0.230671 colnames_numerics_only = df.select_dtypes(include=np.number).columns.tolist() colnames_numerics_only # ['A', 'B']
请参阅以下代码:
if(dataset.select_dtypes(include=[np.number]).shape[1] > 0): display(dataset.select_dtypes(include=[np.number]).describe()) if(dataset.select_dtypes(include=[np.object]).shape[1] > 0): display(dataset.select_dtypes(include=[np.object]).describe())
通过这种方式,您可以检查值是数值,如float和int还是srting值。第二个if语句用于检查对象引用的字符串值。
下面的代码将返回数据集的数字列的名称列表。
cnames=list(marketing_train.select_dtypes(exclude=['object']).columns)
marketing_train
select_dtypes()
['custAge', 'campaign', 'pdays', 'previous', 'emp.var.rate', 'cons.price.idx', 'cons.conf.idx', 'euribor3m', 'nr.employed', 'pmonths', 'pastEmail']
简单的一行程序:
df.select_dtypes('number').columns
我们可以根据下面的要求包括和排除数据类型:
train.select_dtypes(include=None, exclude=None) train.select_dtypes(include='number') #will include all the numeric types
参考自木星笔记本。
要选择所有数字类型,请使用np.number或'number'
np.number
'number'
object
参见NumPy dtype hierarchy <http://docs.scipy.org/doc/numpy/reference/arrays.scalars.html>__
NumPy dtype hierarchy <http://docs.scipy.org/doc/numpy/reference/arrays.scalars.html>
选择日期时间,使用np.datetime64, 'datetime'或 李'datetime64' < / p > < / >
np.datetime64
'datetime'
'datetime64'
要选择时间增量,使用np.timedelta64, 'timedelta'或 李'timedelta64' < / p > < / >
np.timedelta64
'timedelta'
'timedelta64'
要选择Pandas分类类型,使用'category'
'category'
要选择Pandas datetimetz dtypes,使用'datetimetz' (new in " datetime64[ns, tz] "
'datetimetz'
虽然这是一个古老的话题,
但我认为下面的公式比其他的都简单
df[df.describe().columns]
由于函数describe()仅适用于数值列,因此输出的列将仅为数值列。