尝试检查Python中的字符串是否遵循正确的模式(良好的格式)

尝试检查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

我有一个包含带字符串的列的数据集。其中一列包含标识符。现在,我想检查该标识符是否遵循以下模式:例如,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 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