识别包含数字和字符串的 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
我只关注 job
和 UniqueID
这两个对象列。
如您所见:
job
只包含字符串
UniqueID
包含字符串和数字
我希望能够识别包含字符串和数字的列(在本例中为 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()
如果你知道你在列中的值是一致的,你也可以只检查第一个值。
我创建了以下数据框(称为 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
我只关注 job
和 UniqueID
这两个对象列。
如您所见:
job
只包含字符串UniqueID
包含字符串和数字
我希望能够识别包含字符串和数字的列(在本例中为 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()
如果你知道你在列中的值是一致的,你也可以只检查第一个值。