首页 > 解决方案 > 以“1992 年 11 月 4 日 (27)”的格式拆分 pandas DataFrame 的 DoB 列,以获得作为日期时间的 DoB

问题描述

我正在使用抓取数据的 pandas DataFrame。对于该dob列,记录采用以下格式:

1992 年 11 月 4 日 (27)

我需要拆分字符串以创建格式为“dd/mm/yyyy”的出生日期列,例如 04/11/1992。我将采用拆分字符串并使用 pd.to_datetime() 函数进行转换。

我还想创建一个年龄列,例如 27。使用当前日期和时间而不是字符串拆分的更优雅的解决方案会很棒。

我想出了一些我自己的解决方案,但我相信这可以使用正则表达式或类似的表达式更优雅地完成。

提前感谢您的帮助!

标签: pythonregexpandasdataframesplit

解决方案


如果要从日期计算年龄,进行比较:

import pandas as pd
from datetime import datetime
today = datetime.today()

df = pd.DataFrame({'DOB': ['Nov 4, 1992 (27)']})
df[['Date', 'Age']] = df['DOB'].str.extract(r'(.+) \((\d+)\)')
df['Date'] = pd.to_datetime(df['Date'])
df['Calculated Age'] = df['Date'].apply(
               lambda x: today.year - x.year - 
               ((today.month, today.day) < (x.month, x.day)) 
               )

推荐阅读