【Python代码】如何根据出生日期计算出年龄?

哈喽,大家好,木易巷来啦!

假设我们有一个包含出生日期的Excel文件,需要计算每个人的年龄,你会怎么做呢?具体情况如下图:

今天木易巷分享通过Python及其强大的pandas库,来实现从Excel文件中读取日期数据,计算年龄,并将结果存储回Excel文件中的过程。

话不多说,开干!

▍1、环境准备

在开始之前,请确保你的Python环境中已经安装了Pandas库。如果尚未安装,可以通过以下命令进行安装:

pip install pandas

此外,为了处理Excel文件,您可能还需要安装openpyxl库(pandas用于读取.xlsx文件的引擎之一):

pip install openpyxl

▍2、编写Python脚本

首先,我们需要导入必要的库,并定义一个函数来计算年龄:

import pandas as pdfrom datetime import datetime# 定义年龄计算函数def calculate_age(birth_date_series):    # 获取当前日期    today = pd.to_datetime(datetime.now())        # 确保输入数据为datetime类型,错误则变为NaT    birth_date_series = pd.to_datetime(birth_date_series, errors='coerce')        # 计算年龄,考虑是否已经过了生日    ages = today.year - birth_date_series.dt.year    # 使用布尔索引来调整年龄    ages[(birth_date_series.dt.month > today.month) |          ((birth_date_series.dt.month == today.month) & (birth_date_series.dt.day > today.day))] -= 1
    # 处理NaT值,可以选择赋值为None或其他    ages = ages.where(~birth_date_series.isna(), None)        return ages

然后,我们读取Excel文件,并使用定义好的函数来计算年龄:

# 读取Excel文件file_name = 'birthdates.xlsx'try:    df = pd.read_excel(file_name)  # 确保文件名与您的Excel文件名一致except FileNotFoundError:    print(f"文件 {file_name} 未找到,请检查文件路径和文件名。")    exit()# 假设出生日期列名为'birth_date'if 'birth_date' in df.columns:    df['age'] = calculate_age(df['birth_date'])else:    print("出生日期列 'birth_date' 不存在于Excel文件中。")    exit()# 查看前几行数据以验证结果print(df.head())

最后,我们将结果保存到一个新的Excel文件:

# 保存结果到新的Excel文件output_file_name = 'output_with_ages.xlsx'df.to_excel(output_file_name, index=False)print(f"结果已保存到 {output_file_name}")

代码运行结果:

生成的“output_with_ages.xlsx”内容:

▍3、代码解析

首先定义了一个calculate_age函数,它接受一个包含日期的Pandas Series作为输入,并返回年龄Series。

使用pd.to_datetime确保所有日期都是datetime类型,错误则转换为NaT。

计算年龄时,我们考虑了是否已经过了生日,如果还没有到生日,则年龄减1。

使用where方法来处理NaT值,将它们替换为None。

读取Excel文件,检查出生日期列是否存在,然后计算年龄并保存结果。

好啦,今天的分享就到这里~

希望可以帮助到你!

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木易巷

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值