当前位置: 首页 > 知识库问答 >
问题:

如果有生日专栏,如何计算一个人当天的年龄?

宁卓
2023-03-14
firstname,secondname,birthdate
vanco,grizov,3-16-1983
vlado,stojanov,6-24-1982
goce,grizov,7-18-1985
import pandas as pd
from datetime import date

data=pd.read_csv(r'C:\\Users\\User\\Desktop\\test\\vanco.csv')
data.head(3)
print(data)

data.birthdate=pd.to_datetime(data.birthdate)
data.head(3)
print (data)

def calculate_age(born):
    today = date.today()
    return today.year - born.year - ((today.month, today.day) < (born.month, born.day))


data['birthdate'].apply(lambda x: calculate_age(x))
print(data)

根据一段代码,我在PyCharm中有这个输出

我编写代码,然后将csv文件中的列birthdate转换为datetime对象:

然后我编写一个函数来创建并返回出生日期的年龄

def calculate_age(born):
    today = date.today()
    return today.year - born.year - ((today.month, today.day) < (born.month, born.day))

data['birthdate'].apply(lambda x: calculate_age(x))
print(data)

从代码中,我在PyCharm控制台中有这个输出

filename secondname  birthdate
0    vanco     grizov  3-16-1983
1    vlado   stojanov  6-24-1982
2     goce     grizov  7-18-1985
  filename secondname  birthdate
0    vanco     grizov 1983-03-16
1    vlado   stojanov 1982-06-24
2     goce     grizov 1985-07-18
  filename secondname  birthdate
0    vanco     grizov 1983-03-16
1    vlado   stojanov 1982-06-24
2     goce     grizov 1985-07-18
  • 预期的输出是一个带有年龄的列,应该添加到数据帧中

共有1个答案

唐俊楚
2023-03-14
  • 这个答案假设期望的输出是年龄,以年为单位,从生日到今天。
  • (今天-bd)返回总天数的值。
    • 除以pd. timedelta(天=365.25),得到年数。
      • 365.25因为一年的长度变化
      import pandas as pd
      from datetime import date
      
      # read the file in and covert the birthdate column to a datetime
      df = pd.read_csv('vanco.csv', parse_dates=['birthdate'])
      
      # function
      def calc_age(bd: pd.Series) -> pd.Series:
          today = pd.to_datetime(date.today())  # convert today to a pandas datetime
          return (today - bd) / pd.Timedelta(days=365.25)  # divide by days to get years
      
      
      # call function and assign the values to a new column in the dataframe
      df['age (years)'] = calc_age(df.birthdate)
      
      # display(df)
        firstname secondname  birthdate  age (years)
      0     vanco     grizov 1983-03-16     37.48118
      1     vlado   stojanov 1982-06-24     38.20671
      2      goce     grizov 1985-07-18     35.14031
      
      • 使用dateutil模块,该模块有更多功能丰富的方法选择
        • relativedelta将补偿闰年
        • 使用。年份relativedelta对象中仅提取年份组件
        # updated function with relativedelta
        def calc_age(bd: pd.Series):
            today = pd.to_datetime(date.today())
            return bd.apply(lambda x: relativedelta(today, x).years)
        
        
        # function call
        df['age (years)'] = calc_age(df.birthdate)
        
        # display(df)
          firstname secondname  birthdate  age (years)
        0     vanco     grizov 1983-03-16           37
        1     vlado   stojanov 1982-06-24           38
        2      goce     grizov 1985-07-18           35
        
        # the output if .years is removed from the calc_age function
          firstname secondname  birthdate                                    age (years)
        0     vanco     grizov 1983-03-16  relativedelta(years=+37, months=+5, days=+22)
        1     vlado   stojanov 1982-06-24  relativedelta(years=+38, months=+2, days=+14)
        2      goce     grizov 1985-07-18  relativedelta(years=+35, months=+1, days=+20)
        

 类似资料:
  • 我想知道如何用基本Python解决这个问题(不使用库):如何计算一个人生日后的10000天将是(或将是)什么时候。例如,考虑到2008年5月19日星期一,理想的日期是2035年10月5日星期五。(根据https://www.durrans.com/projects/calc/10000/index.html?dob=19/5/2008 到目前为止,我所做的是以下脚本 它估计了一个人从生日起1000

  • 无法计算年、月、日两个日期之间的差异。问题是每个月有30天,每年有365天,没有例外。这里有很多话题,但我没有找到任何能解决我的问题或帮助我解决问题的。我发现的每一个主题都只是用普通的方法解决计算差分的问题,这很简单。我如何计算这种差异? 我使用的是Java 7(没有机会安装joda time)和groovy 2.4.0。 例子有: 谢谢

  • 问题内容: 我想以Java方法的整数形式返回年龄(以年为单位)。我现在所拥有的是getBirthDate()返回Date对象(带有出生日期;的以下内容: 但是由于不赞成使用getYear(),所以我想知道是否有更好的方法可以做到这一点?我什至不确定这是否能正常工作,因为我还没有进行单元测试。 问题答案: JDK 8使这个变得轻松而优雅: 一个JUnit测试以证明其用法: 现在每个人都应该使用JDK

  • 在Postgres数据库中给定此架构: 我如何查询表以获得每个人今天之后的下一个生日的日期? 例如,如果Bob的出生日期是2000-06-01,那么他的下一个生日将是2016-06-01。 注意:我不是在寻找一个预定义的,而是一个人出生的下一个周年纪念日。 我已经用Python写了等效的: 然而,我想看看博士后是否能以更有效的方式做到这一点。

  • 我有两个约会: 来自数据库的查询集,其中包括日期字段(1992-11-15)和date.today() 以下是我的观点。py 这是我的django模板 我怎样才能减去它们得到确切的年龄?我只能做减法。 谢谢

  • 问题内容: 对于以下计算: 结果是: 相当于31天+1天= 32天。 为此: 结果是: 这等于:31天(八月)+ 30天(九月)+1(十月)= 62天 包裹中是否有一种方法可以计算出天数?我找不到一个。不知道我是否忽略了任何内容,还是只是简单地不存在。 问题答案: 从文档中: 要使用基于日期的值(年,月,日)定义时间量,请使用该类。的类提供各种获取方法,例如,,和。要呈现在时间的单个单元,测量的时