识别包含数字和字符串的 pandas 数据框列

Identify pandas dataframe columns containing both numeric and string

我创建了以下数据框(称为 df):

d = {'ltv': [1, 22,45,78], 'age': [33, 43,54,65],'job': ['Salaried','Salaried','Salaried','Owner'], 'UniqueID' : ['A1','A2','A3','A4'] }
df = pd.DataFrame(data=d)

看起来像这样:

print(df)

   ltv  age       job UniqueID
     1   33  Salaried       A1
    22   43  Salaried       A2
    45   54  Salaried       A3
    78   65     Owner       A4

我检查了它的列类型:

print(df.info())

 #   Column    Non-Null Count  Dtype 
---  ------    --------------  ----- 
 0   ltv       4 non-null      int64 
 1   age       4 non-null      int64 
 2   job       4 non-null      object
 3   UniqueID  4 non-null      object

我只关注 jobUniqueID 这两个对象列。 如您所见:

我希望能够识别包含字符串和数字的列(在本例中为 UniqueID)。

如果我对 UniqueID 使用以下代码:

print(df['UniqueID'].str.isalnum())

0    True
1    True
2    True
3    True

我看到它 returns True 用于所有记录,这很棒。现在,如果我对 job 使用相同的代码,我会得到相同的结果:

print(df['job'].str.isalnum())

    0    True
    1    True
    2    True
    3    True

那么,我如何在 pandas 中识别哪一列同时包含字符串和数字(​​在此示例中:UniqueID)?

您可以定义自己的函数

def findchrandnum(x):
    try :
        return all(x.str.isalnum() & ~x.str.isalpha() & ~x.str.isdigit())
    except:
        return False
df.apply(findchrandnum)
Out[66]: 
ltv         False
age         False
job         False
UniqueID     True
dtype: bool

您可以对要检查的列使用apply 方法,为每一行查找数字。总和将为您提供该列中有数字的值的数量:

col = 'UniqueID'
df[col].apply(
    lambda val: any(ch.isdigit() for ch in val)
).sum()

如果你知道你在列中的值是一致的,你也可以只检查第一个值。