如何检查pandas数据框是否仅包含数字列?

Raj*_*e S 5 python series dataframe pandas

我想检查数据框中的每一列是否仅包含数字。我如何找到它。

Kar*_*mar 7

您可以使用以下方法绘制真/假比较 isnumeric()

例子:

 >>> df
       A      B
0      1      1
1    NaN      6
2    NaN    NaN
3      2      2
4    NaN    NaN
5      4      4
6   some   some
7  value  other
Run Code Online (Sandbox Code Playgroud)

结果:

>>> df.A.str.isnumeric()
0     True
1      NaN
2      NaN
3     True
4      NaN
5     True
6    False
7    False
Name: A, dtype: object

# df.B.str.isnumeric()
Run Code Online (Sandbox Code Playgroud)

apply()如果您需要角到角比较,方法似乎更健壮:

DataFrame 有两个不同的列,一个是混合类型,另一个是数字,仅用于测试:

>>> df
       A   B
0      1   1
1    NaN   6
2    NaN  33
3      2   2
4    NaN  22
5      4   4
6   some  66
7  value  11
Run Code Online (Sandbox Code Playgroud)

结果:

>>> df.apply(lambda x: x.str.isnumeric())
       A     B
0   True  True
1    NaN  True
2    NaN  True
3   True  True
4    NaN  True
5   True  True
6  False  True
7  False  True
Run Code Online (Sandbox Code Playgroud)

另一个例子:

让我们考虑以下具有不同数据类型的数据框,如下所示..

>>> df
   num  rating    name  age
0    0    80.0  shakir   33
1    1   -22.0   rafiq   37
2    2   -10.0     dev   36
3  num     1.0   suraj   30
Run Code Online (Sandbox Code Playgroud)

基于 OP 对此答案的评论,其中包含负值和 0。

1- 这是一种仅返回数字类型数据的伪内部方法。

>>> df._get_numeric_data()
   rating  age
0    80.0   33
1   -22.0   37
2   -10.0   36
3     1.0   30
Run Code Online (Sandbox Code Playgroud)

或者

2- 可以选择使用select_dtypes模块 pandas.core.frame 中的方法,该方法根据 column 返回 DataFrame 列的子集dtypes。可以Parametersinclude, exclude选项一起使用。

>>> df.select_dtypes(include=['int64','float64']) # choosing int & float
   rating  age
0    80.0   33
1   -22.0   37
2   -10.0   36
3     1.0   30

>>> df.select_dtypes(include=['int64'])  # choose int
   age
0   33
1   37
2   36
3   30
Run Code Online (Sandbox Code Playgroud)


raf*_*elc 6

您可以检查使用to_numeric和强制错误:

pd.to_numeric(df['column'], errors='coerce').notnull().all()
Run Code Online (Sandbox Code Playgroud)

对于所有列,您可以遍历列或仅使用 apply

df.apply(lambda s: pd.to_numeric(s, errors='coerce').notnull().all())
Run Code Online (Sandbox Code Playgroud)

例如

df = pd.DataFrame({'col' : [1,2, 10, np.nan, 'a'], 
                   'col2': ['a', 10, 30, 40 ,50],
                   'col3': [1,2,3,4,5.0]})
Run Code Online (Sandbox Code Playgroud)

产出

col     False
col2    False
col3     True
dtype: bool
Run Code Online (Sandbox Code Playgroud)


Vai*_*ali 5

如果所有列都是数字,这将返回 True,否则返回 False。

df.shape[1] == df.select_dtypes(include=np.number).shape[1]
Run Code Online (Sandbox Code Playgroud)

要选择数字列:

new_df = df.select_dtypes(include=np.number)
Run Code Online (Sandbox Code Playgroud)