熊猫将str转换为Date并计算年龄

时间:2019-12-10 20:26:03

标签: python pandas

我有一张桌子看起来像这样

Transaction_Date | Name | Birth_Date
  1/01/15       | Tom  | 16/11/89 
  1/01/15       | Kate | 8/03/65 
              ....
  1/01/15       | Ken | 14/05/64 

Transaction_Date和Birth_Date的数据类型为str

我想按(交易日期-出生日期)添加年龄列

我的代码是

tableA['Transaction_Date'] = pd.to_datetime(join_table['Transaction_Date'])
tableA['Birth_Date'] = pd.to_datetime(join_table['Birth_Date'])
tableA['Age'] = tableA['Transaction_Date'] - tableA['Birth_Date']).astype('<m8[Y]'

结果如下

Transaction_Date | Name | Birth_Date   | Age
 2015-01-01       | Tom  | 1989-11-16  |  25.0
 2015-01-01       | Kate | 2065-03-08  |  -50.0
              ....
 2015-01-01       | Ken  | 2064-05-14   | -49.0

《多美的生日》是正确的,但凯特或肯都错了。对于凯特来说应该是“ 1965-03-08”,对于肯来说应该是“ 1964-05-14”

问题:如何计算具有int类型的Age?

当我使用

int(tableA['Age'] = tableA['Transaction_Date'] - tableA['Birth_Date']).astype('<m8[Y]'
#TypeError: cannot convert the series to <class 'int'>)

谢谢。

1 个答案:

答案 0 :(得分:1)

尝试一下,必须工作。

df['birth_date'] = pd.to_datetime(df['Birth_Date'].str[:-2] + '19' + df['Birth_Date'].str[-2:])

要计算AGE,您必须执行以下操作:

df['transaction_date'] = pd.to_datetime(df['Transaction_Date'])

df['age'] = df['transaction_date'].dt.year - df['birth_date'].dt.year