尝试检查Python中的字符串是否遵循正确的模式(良好的格式)
我有一个包含带字符串的列的数据集。其中一列包含标识符。现在,我想检查该标识符是否遵循以下模式:例如,AB12CD,所以2个字母(大写),2个数字后再加2个字母 数据存储在数据框中。我有:尝试检查Python中的字符串是否遵循正确的模式(良好的格式),python,python-3.x,pandas,match,Python,Python 3.x,Pandas,Match,我有一个包含带字符串的列的数据集。其中一列包含标识符。现在,我想检查该标识符是否遵循以下模式:例如,AB12CD,所以2个字母(大写),2个数字后再加2个字母 数据存储在数据框中。我有: for i in range(0, len(data.columns)): if data.columns[i] == 'identifier ': pattern = re.compile("[A-Z][A-Z][0-9][0-9][A-Z][A-Z]") if pat
for i in range(0, len(data.columns)):
if data.columns[i] == 'identifier ':
pattern = re.compile("[A-Z][A-Z][0-9][0-9][A-Z][A-Z]")
if pattern.match(data.ix[i, 0]):
data['identifier Check'] = 'Ok'
else:
data['identifier Check'] = 'identifier Format incorrect'
但这是行不通的。它会显示每一行OK或Corp键不正确。取决于第一行
有人能帮我吗?
谢谢 您的代码无法按预期工作,因为
数据['identifier Check']=“Ok”
将'Ok'
分配给标识符检查
列中的每一行
您的代码还按列而不是按行扫描DataFrame(即它检查每列第一行中的值,而不是检查每行特定列中的值)
我的解决方案定义了一个函数,该函数在给定字符串和模式的情况下返回所需的输出
使用pandas.Series
具有的apply
方法调用此函数。在这种情况下,它将检查数据['identifier']
列中的每个项目,并将其发送到检查标识符
功能。data['identifier'].apply(check_identifier)
的结果将是一个np.array
,然后将该数组分配给数据帧中新创建的identifier check
列
# abusing the fact that default arguments are evaluated only during function definition
def check_identifier(value, pattern=re.compile("[A-Z][A-Z][0-9][0-9][A-Z][A-Z]")):
return 'OK' if pattern.match(value) else 'identifier Format incorrect'
data['identifier Check'] = data['identifier'].apply(check_identifier)
例如:
def check_identifier(value, pattern=re.compile("[A-Z][A-Z][0-9][0-9][A-Z][A-Z]")):
return 'OK' if pattern.match(value) else 'identifier Format incorrect'
df = pd.DataFrame({'a':['AB12CD', 'AB12Cd']})
print(df)
>> a
0 AB12CD
1 AB12Cd
df['identifier Check'] = df['a'].apply(check_identifier)
print(df)
>> a identifier Check
0 AB12CD OK
1 AB12Cd identifier Format incorrect
您的代码无法按预期工作,因为
data['identifier Check']=“Ok”
将'Ok'
分配给identifier Check
列中的每一行
您的代码还按列而不是按行扫描DataFrame(即它检查每列第一行中的值,而不是检查每行特定列中的值)
我的解决方案定义了一个函数,该函数在给定字符串和模式的情况下返回所需的输出
使用pandas.Series
具有的apply
方法调用此函数。在这种情况下,它将检查数据['identifier']
列中的每个项目,并将其发送到检查标识符
功能。data['identifier'].apply(check_identifier)
的结果将是一个np.array
,然后将该数组分配给数据帧中新创建的identifier check
列
# abusing the fact that default arguments are evaluated only during function definition
def check_identifier(value, pattern=re.compile("[A-Z][A-Z][0-9][0-9][A-Z][A-Z]")):
return 'OK' if pattern.match(value) else 'identifier Format incorrect'
data['identifier Check'] = data['identifier'].apply(check_identifier)
例如:
def check_identifier(value, pattern=re.compile("[A-Z][A-Z][0-9][0-9][A-Z][A-Z]")):
return 'OK' if pattern.match(value) else 'identifier Format incorrect'
df = pd.DataFrame({'a':['AB12CD', 'AB12Cd']})
print(df)
>> a
0 AB12CD
1 AB12Cd
df['identifier Check'] = df['a'].apply(check_identifier)
print(df)
>> a identifier Check
0 AB12CD OK
1 AB12Cd identifier Format incorrect