我正在嘗試驗證存盤在表格中的許多不同國家/地區的郵政編碼是否格式正確,例如:
| 壓縮 | 國家代碼 |
|---|---|
| 第1033章 | 荷蘭 |
| 60593 | 德 |
為此,我有一個單獨的 DF,其中包含國家代碼和正則運算式作為每個郵政編碼的模式。
| 正則運算式 | 國家 |
|---|---|
| \d{4}[ ]?[AZ]{2} | 荷蘭 |
| \d{5} | 德 |
我正在嘗試將其合并到基于國家代碼的表中,然后如果基于正則運算式的郵政編碼正確,則創建指示為 True 或 False 的表。
這是我當前的代碼:
df_merged = pd.merge(regex_df, zip_df, left_on = 'CODE', right_on= 'COUNTRY_CODE')
df_merged['zip_correct'] = df_mergedf.CODE_y.str.contains(df_merged.REGEX.str, regex= True, na=False)
但是,由于 pandas 正在檢查每一行中的正則運算式模式,所以我只設定了錯誤的結果。我怎么能限制它逐行檢查呢?
預期輸出:
| 壓縮 | 國家代碼 | ZIP_CORRECT |
|---|---|---|
| 第1033章 | 荷蘭 | 真的 |
| 60593 | 德 | 真的 |
| 6059TT | 德 | 錯誤的 |
能否請你幫忙?
uj5u.com熱心網友回復:
我想你可能有很多國家。您可以apply re.match在每一行上使用匹配的國家/地區正則運算式:
import re
s = regex_df.set_index('COUNTRY')['REGEX']
df['ZIP_CORRECT'] = df.apply(lambda x: bool(re.match('%s$' % s[x['COUNTRY_CODE']], x['ZIP'])), axis=1)
輸出:
ZIP COUNTRY_CODE ZIP_CORRECT
0 1033 SC NL True
1 60593 DE True
2 6059TT DE False
uj5u.com熱心網友回復:
您可以使用
import pandas as pd
import re
zip_df = pd.DataFrame({"ZIP":["1033 SC", "60593"], "COUNTRY_CODE": ["NL","DE"]})
regex_df = pd.DataFrame({"REGEX":[r"\d{4}[ ]?[A-Z]{2}", "\d{5}"], "COUNTRY": ["NL","DE"]})
d = dict(regex_df[['COUNTRY', 'REGEX']].to_numpy())
zip_df['ZIP_CORRECT'] = zip_df.apply(lambda x: bool(re.fullmatch(d[x['COUNTRY_CODE']], x['ZIP'])), axis=1)
d字典看起來像{'NL': '\\d{4}[ ]?[A-Z]{2}', 'DE': '\\d{5}'},并且在 中.apply(),資料幀中的每個ZIP值都根據zip_df字典中的適當正則運算式模式進行檢查,因為它是d使用zip_df COUNTRY_CODE值作為鍵從字典中獲得的。
請注意,僅當正則運算式模式完全匹配字串(即匹配整個字串)re.fullmatch時才回傳True 。
在 Pandas 中測驗(復制/粘貼):
>>> import pandas as pd
>>> import re
>>> zip_df = pd.DataFrame({"ZIP":["1033 SC", "60593", "6059TT"], "COUNTRY_CODE": ["NL","DE","DE"]})
>>> regex_df = pd.DataFrame({"REGEX":[r"\d{4}[ ]?[A-Z]{2}", "\d{5}"], "COUNTRY": ["NL","DE"]})
>>> d = dict(regex_df[['COUNTRY', 'REGEX']].to_numpy())
>>> zip_df['ZIP_CORRECT'] = zip_df.apply(lambda x: bool(re.fullmatch(d[x['COUNTRY_CODE']], x['ZIP'])), axis=1)
>>> zip_df
ZIP COUNTRY_CODE ZIP_CORRECT
0 1033 SC NL True
1 60593 DE True
2 6059TT DE False
>>>
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/410152.html
標籤:
下一篇:查找連接單元的長度為1s
