查找至少有一行包含字母的列

2024-04-26 00:28:27 发布

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

假设我有以下数据集:

import pandas as pd

df = pd.DataFrame(
        {'A': [1, 2, 3],
         'B': ['one', 2, 3],
         'C': [4, 5, '6Y']
         })

我想找出-没有任何麻烦的for循环-哪些列至少包含一个字母大小写(这里:BC)。我猜结果应该是一个布尔或指数列表。你知道吗

谢谢你的帮助!你知道吗


Tags: 数据importdataframepandasdf列表foras
3条回答

在这种情况下,您可以使用to_numeric

df.apply(pd.to_numeric,errors='coerce').isnull().any()
Out[37]: 
A    False
B     True
C     True
dtype: bool

更新

df.stack().str.contains('[a-zA-Z]').groupby(level=1).any()
Out[62]: 
A    False
B     True
C     True
dtype: bool

作为一个快速简单的解决方案,您可以使用replace和过滤器:

df.replace('(?i)[a-z]', '', regex=True).ne(df).any()

A    False
B     True
C     True
dtype: bool

df.columns[df.replace('(?i)[a-z]', '', regex=True).ne(df).any()]
# Index(['B', 'C'], dtype='object')

另一个选项是按列应用str.contains

mask = df.astype(str).apply(
    lambda x: x.str.contains(r'[a-z]', flags=re.IGNORECASE)).any()
mask

A    False
B     True
C     True
dtype: bool

df.columns[mask]
# Index(['B', 'C'], dtype='object')

我们可以使用^{}

df.apply(pd.to_numeric, errors='coerce').isna().any().tolist()
# [False, True, True]

另一种方法是将applymapstr.isnumeric一起使用:

(~df.astype(str).applymap(str.isnumeric).all()).tolist()
# [False, True, True]

相关问题 更多 >

    热门问题