How do I find numeric columns in Pandas?
假设
1 | isNumeric = is_numeric(df) |
您可以使用数据帧的
1 2 3 | numerics = ['int16', 'int32', 'int64', 'float16', 'float32', 'float64'] newdf = df.select_dtypes(include=numerics) |
您可以使用未记录的函数
1 | df._get_numeric_data() |
。
例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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 |
请注意,这是一个"私有方法"(即实现细节),将来可能会发生更改或完全删除。小心使用。
简单的一行应答来创建一个只有数字列的新数据帧:
1 | df.select_dtypes(include=[np.number]) |
如果需要数字列的名称:
1 | df.select_dtypes(include=[np.number]).columns.tolist() |
。
完整代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | 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'] |
1 | df.select_dtypes(exclude=['object']) |
。
调整这个答案,你可以
1 | df.ix[:,df.applymap(np.isreal).all(axis=0)] |
号
这里,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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) |
请参见以下代码:
1 2 3 4 | 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语句用于检查对象引用的字符串值。
这是在PANDAS数据框中查找数字列的另一个简单代码,
1 | numeric_clmns = df.dtypes[df.dtypes !="object"].index |
。