如何在Pandas中找到数字列?
假设 df
是一个 pandas 数据框(DataFrame)。我想找出所有数字类型的列。可以这样做:
isNumeric = is_numeric(df)
15 个回答
46
简单的一行代码:
df.select_dtypes('number').columns
76
df.select_dtypes(exclude = ['object'])
df.select_dtypes(include= np.number)
df.select_dtypes('number')
更新:
或者使用新版的pandas
93
你可以使用一个不太公开的函数 _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
请注意,这个是一个“私有方法”(也就是说,它是实现的一部分),将来可能会改变或者完全删除。使用时要小心。
178
这里有一个简单的一行代码,可以用来创建一个只包含数字列的新数据表:
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']
293
你可以使用DataFrame的select_dtypes
方法。这个方法有两个参数,分别是include和exclude。所以,判断是否是数字的代码可以这样写:
numerics = ['int16', 'int32', 'int64', 'float16', 'float32', 'float64']
newdf = df.select_dtypes(include=numerics)
df.select_dtypes(include='number')