如何计算人的年龄(基于dob列),并使用新值将一列添加到数据框中?
数据框如下所示:
lname fname dob
0 DOE LAURIE 03011979
1 BOURNE JASON 06111978
2 GRINCH XMAS 12131988
3 DOE JOHN 11121986
我尝试执行以下操作:
now = datetime.now()
df1['age'] = now - df1['dob']
但是,收到以下错误:
TypeError:-:“ datetime.datetime”和“ str”的不受支持的操作数类型
import datetime as DT
import io
import numpy as np
import pandas as pd
pd.options.mode.chained_assignment = 'warn'
content = ''' ssno lname fname pos_title ser gender dob
0 23456789 PLILEY JODY BUDG ANAL 0560 F 031871
1 987654321 NOEL HEATHER PRTG SRVCS SPECLST 1654 F 120852
2 234567891 SONJU LAURIE SUPVY CONTR SPECLST 1102 F 010999
3 345678912 MANNING CYNTHIA SOC SCNTST 0101 F 081692
4 456789123 NAUERTZ ELIZABETH OFF AUTOMATION ASST 0326 F 031387'''
df = pd.read_csv(io.StringIO(content), sep='\s{2,}')
df['dob'] = df['dob'].apply('{:06}'.format)
now = pd.Timestamp('now')
df['dob'] = pd.to_datetime(df['dob'], format='%m%d%y') # 1
df['dob'] = df['dob'].where(df['dob'] < now, df['dob'] - np.timedelta64(100, 'Y')) # 2
df['age'] = (now - df['dob']).astype('<m8[Y]') # 3
print(df)
产量
ssno lname fname pos_title ser gender \
0 23456789 PLILEY JODY BUDG ANAL 560 F
1 987654321 NOEL HEATHER PRTG SRVCS SPECLST 1654 F
2 234567891 SONJU LAURIE SUPVY CONTR SPECLST 1102 F
3 345678912 MANNING CYNTHIA SOC SCNTST 101 F
4 456789123 NAUERTZ ELIZABETH OFF AUTOMATION ASST 326 F
dob age
0 1971-03-18 00:00:00 43
1 1952-12-08 18:00:00 61
2 1999-01-09 00:00:00 15
3 1992-08-16 00:00:00 22
4 1987-03-13 00:00:00 27
dob
栏目前是字串。首先,将它们转换为Timestamps
using pd.to_datetime
。'%m%d%y'
将最后两位数字转换为年份,但不幸的是假设的52
平均值为2052。由于这可能不是希瑟·诺埃尔(Heather Noel)的出生年,因此,dob
只要dob
大于,就减去100年now
。您可能要减去几年now
的状况,df['dob'] < now
因为拥有101岁工人的可能性可能比拥有1岁工人的可能性要高一些。dob
从now
获得timedelta64 [NS] 。要将其转换为年份,请使用astype('<m8[Y]')
或astype('timedelta64[Y]')
。本文向大家介绍Postgresql 通过出生日期获取年龄的操作,包括了Postgresql 通过出生日期获取年龄的操作的使用技巧和注意事项,需要的朋友参考一下 三个基础的时间表示函数 CURRENT_DATE/CURRENT_TIME/NOW() SELECT CURRENT_DATE ; 返回当前日期以 年-月-日(yyyy-MM-dd)的形式: 2019-01-10 SELECT CURREN
问题内容: 这个问题已经在这里有了答案 : 在MySQL中获取一个人的年龄 (2个答案) 6年前关闭。 我在mysql中有一个表,它的出生日期列保存为unix时间戳(bigint)。 我想这样写查询: 和 3点是从出生日期算起年龄的函数。 我知道该函数,但是如果将出生日期另存为unix时间戳,那就不好了。 我能做些什么? 谢谢 问题答案: 从MySQL的日期和时间函数,我们可以结合,和。 假设这是
问题内容: 我在sql中有一个用户表,他们每个都有生日。我想将他们的出生日期转换为他们的年龄(仅年),例如日期:年龄:14,并将更改为年龄: 在这里,我想显示用户的日期: 问题答案: 功能:, MySQL > = 5.0.0 功能:,
当我没有发现任何关于将年龄转换为出生日期的内容时,我感到惊讶。关于将出生日期转换为年龄,有很多答案,但并非相反。 我有两位数(我能够将它们转换为任何数据类型,甚至转换为DateTime.date(python-格式))。如何将它们转换为完整的SQL日期。它必须current_date年龄(日期和月份对我来说不重要)。最好通过数据库而不是python来完成此操作。 DDL: p、 美国相关问题在My
本文向大家介绍python根据出生日期获得年龄的方法,包括了python根据出生日期获得年龄的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了python根据出生日期获得年龄的方法。分享给大家供大家参考。具体如下: 这段代码可以根据用户的出生日期获得其年龄,born参数为date类型 希望本文所述对大家的Python程序设计有所帮助。
问题内容: 我的MySQL表中有一个dob字段,其类型为。只是一个简单的小例子,是这样的: 我正在尝试通过使用今天的日期来计算带小数点的年龄。因此从技术上讲,如果你的生日是1981年6月1日或1981年6月1日,让你33,今天是6月7日..你会是什么来计算这个使用SQL最简单的方法? 问题答案: 通常,当您要计算年份而没有任何分数时,DOB计算在mysql中非常容易 但是由于您还需要分数,因此应该