您的代碼無法按預期方式工作,因爲data['identifier Check'] = 'Ok'
將分配給identifier Check
列中的每一行。
您的代碼還會逐列掃描DataFrame而不是逐行掃描(即檢查每列的第一行中的值,而不是檢查每行的特定列中的值)。
我的解決方案定義了一個函數,返回給定字符串和模式的所需輸出。
使用pandas.Series
所具有的apply
方法調用此函數。在這種情況下,它將遍歷data['identifier']
列中的每個項目並將其發送到check_identifier
函數。 data['identifier'].apply(check_identifier)
的結果將爲np.array
,然後將其分配給DataFrame中新創建的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