如何基于python-codicefiscale库为DataFrame新增城市与省份列
问题描述
有一个包含user_id和tax_code两列的DataFrame,需要借助python-codicefiscale库新增两列:
name:解析每行税码对应的城市名称province:解析每行税码对应的省份信息
调用codicefiscale.decode()返回的字典结构如下:
codicefiscale.decode('CCCFBA85D03L219P') # 返回结果: # { # 'code': 'CCCFBA85D03L219P', # 'sex': 'M', # 'birthdate': datetime.datetime(1985, 4, 3, 0, 0), # 'birthplace': { # 'name': 'TORINO', # 'province': 'TO', # 'code': 'L219', # }, # 'omocodes': [ # 'CCCFBA85D03L219P', # 'CCCFBA85D03L21VE', # 'CCCFBA85D03L2MVP', # 'CCCFBA85D03LNMVE', # 'CCCFBA85D0PLNMVA', # 'CCCFBA85DLPLNMVL', # 'CCCFBA8RDLPLNMVX', # 'CCCFBAURDLPLNMVU', # ], # 'raw': { # 'code': 'CCCFBA85D03L219P', # 'surname': 'CCC', # 'name': 'FBA', # 'birthdate': '85D03', # 'birthdate_year': '85', # 'birthdate_month': 'D', # 'birthdate_day': '03', # 'birthplace': 'L219', # 'cin': 'P', # }, # }
尝试了以下函数但未解决问题:
from codicefiscale import codicefiscale def valid(row): tax_code = row[1] if tax_code.codicefiscale.is_valid(): return True else: return False
解决方案
可以通过DataFrame.apply()方法逐行处理税码,先验证有效性,再解析提取所需信息:
- 导入必要库
from codicefiscale import codicefiscale import pandas as pd
- 定义处理函数,返回城市名和省份信息
def get_birthplace_info(row): tax_code = row['tax_code'] # 验证税码有效性 if codicefiscale.is_valid(tax_code): decoded_data = codicefiscale.decode(tax_code) # 从解析结果中提取城市和省份 city_name = decoded_data['birthplace']['name'] province_code = decoded_data['birthplace']['province'] return pd.Series([city_name, province_code]) # 无效税码返回空值,可根据需求修改默认值 return pd.Series([None, None])
- 应用函数到DataFrame,新增目标列
# 假设你的DataFrame变量名为df df[['name', 'province']] = df.apply(get_birthplace_info, axis=1)
关键修正说明
- 原函数错误:
tax_code.codicefiscale.is_valid()写法不符合库的调用规范,正确方式是直接调用codicefiscale.is_valid()并传入税码字符串参数 - 使用
pd.Series包装返回值,能直接映射到新增的两列 - 针对无效税码返回
None,可根据业务需求替换为空字符串或其他标识值
内容的提问来源于stack exchange,提问作者Lomba
相关产品推荐
相关产品推荐

