如何检查pandas数据帧是否只包含数字列?

2024-03-29 10:12:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我想检查数据帧中的每一列是否只包含数字。我怎么能找到它。


Tags: 数字检查数据
3条回答

假设您有一个名为df的数据帧,如果您这样做了:

df.select_dtypes(include=["float", 'int'])

这将返回所有数值列,您可以检查它是否与原始的df相同。

否则,还可以使用exclude参数:

df.select_dtypes(exclude=["float", 'int'])

并检查这是否给了您一个空的数据帧。

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

pd.to_numeric(df['column'], errors='coerce').notnull().all()

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

df.apply(lambda s: pd.to_numeric(s, errors='coerce').notnull().all())

例如

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

输出

col     False
col2    False
col3     True
dtype: bool

可以使用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

结果:

>>> 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()

使用apply()方法,在需要角对角比较的情况下,该方法看起来更健壮:

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

>>> 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

结果:

>>> 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

相关问题 更多 >