如何在pandas中find数字列?

假设df是一个pandasDataFrame。 我想查找数字types的所有列。 就像是:

 isNumeric = is_numeric(df) 

你可以使用DataFrame的select_dtypes方法。 它包括两个参数包括和排除。 所以数字看起来像:

 numerics = ['int16', 'int32', 'int64', 'float16', 'float32', 'float64'] newdf = df.select_dtypes(include=numerics) 

您可以使用以下命令仅筛选数字列

 df._get_numeric_data() 

 In [32]: data Out[32]: AB 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']) 
 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,并返回一系列可用于索引的布尔值所需的列。

这是在pandas数据框中查找数字列的另一个简单代码,

  numeric_clmns = df.dtypes[df.dtypes != "object"].index 

简单的单行答案,只用数字列创build一个新的数据框:

 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 # ABCD # 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 # AB # 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']