2024-04-26 00:28:27 发布
网友
假设我有以下数据集:
import pandas as pd df = pd.DataFrame( {'A': [1, 2, 3], 'B': ['one', 2, 3], 'C': [4, 5, '6Y'] })
我想找出-没有任何麻烦的for循环-哪些列至少包含一个字母大小写(这里:B和C)。我猜结果应该是一个布尔或指数列表。你知道吗
B
C
谢谢你的帮助!你知道吗
在这种情况下,您可以使用to_numeric
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和过滤器:
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:
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]
另一种方法是将applymap与str.isnumeric一起使用:
applymap
str.isnumeric
(~df.astype(str).applymap(str.isnumeric).all()).tolist() # [False, True, True]
在这种情况下,您可以使用
to_numeric
更新
作为一个快速简单的解决方案,您可以使用
replace
和过滤器:另一个选项是按列应用
str.contains
:我们可以使用^{} :
另一种方法是将
applymap
与str.isnumeric
一起使用:相关问题 更多 >
编程相关推荐