You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于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()方法逐行处理税码,先验证有效性,再解析提取所需信息:

  1. 导入必要库
from codicefiscale import codicefiscale
import pandas as pd
  1. 定义处理函数,返回城市名和省份信息
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])
  1. 应用函数到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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 09:50:42