使用Pandas与Schwifty解析IBAN提取银行信息遇类型错误求助
解决方案
由于schwifty.IBAN仅支持处理单个字符串对象,无法直接对DataFrame列进行批量操作,你可以通过pandas.Series.apply()实现逐元素处理,具体步骤如下:
1. 导入所需库
import pandas as pd import numpy as np from schwifty import IBAN
2. 定义IBAN解析函数
编写一个函数,接收单个IBAN字符串,返回提取出的银行代码(Bank Keys)和银行账号(Bank Account number),同时处理空值和无效IBAN的情况:
def parse_iban(iban_str): if pd.isna(iban_str): return (np.nan, np.nan) try: iban_obj = IBAN(iban_str) return (iban_obj.bank_code, iban_obj.account_code) except Exception: # 若IBAN格式无效,可返回空值或原列值,按需调整 return (np.nan, np.nan)
3. 批量处理并更新数据
通过apply解析IBAN列,拆分结果后仅覆盖IBAN非空行的对应列:
# 解析所有IBAN值,得到包含银行代码和账号的元组序列 parsed_results = df["IBAN"].apply(parse_iban) # 生成IBAN非空的掩码 non_empty_iban = df["IBAN"].notna() # 更新Bank Keys列 df.loc[non_empty_iban, "Bank Keys"] = parsed_results[non_empty_iban].str[0] # 更新Bank Account number列 df.loc[non_empty_iban, "Bank Account number"] = parsed_results[non_empty_iban].str[1]
注意事项
- 若你的实际列名是
BANKL(对应Bank Keys),请将代码中的列名替换为实际名称。 - 异常处理部分可根据业务需求调整,比如记录无效IBAN的行索引,或保留原有列值而非返回空值。
apply方法相比显式循环更符合pandas的向量化操作逻辑,效率更高。
内容的提问来源于stack exchange,提问作者SMS
相关产品推荐
相关产品推荐

