📅  最后修改于: 2023-12-03 15:37:25.572000             🧑  作者: Mango
在数据分析过程中,我们可能会遇到需要将出生日期转换为年龄的情况。在 Pandas 中,我们可以使用 datetime 模块和 apply 函数来实现这一功能。
步骤 1:导入数据
首先,我们需要导入数据。这里我们可以使用 Pandas 自带的数据集 iris,其中包含了花卉数据和花的类别。
import pandas as pd
df = pd.read_csv('https://raw.githubusercontent.com/uiuc-cse/data-fa14/gh-pages/data/iris.csv')
步骤 2:转换日期格式
在这个数据集中,没有出生日期的列。为了演示转换的过程,我们可以自己添加一列:
df['Birthdate'] = pd.date_range(start='1/1/2000', end='12/31/2002', periods=len(df))
这里使用了 pd.date_range 函数,其参数 start 指定了开始日期,end 指定了结束日期,periods 指定了生成的日期数量。由于该数据集共有 150 行,则周期数量为 150。
现在,我们需要确保 Birthdate 列已经被正确地转换为日期格式。我们可以使用 dtypes 函数来检查数据类型:
print(df.dtypes)
输出:
SepalLength float64
SepalWidth float64
PetalLength float64
PetalWidth float64
Name object
Birthdate object
dtype: object
可以看到 Birthdate 列的数据类型为 object,而不是 datetime64[ns]。因此,我们需要将其转换为日期格式:
df['Birthdate'] = pd.to_datetime(df['Birthdate'])
步骤 3:计算年龄
现在,我们已经将 Birthdate 列转换为了日期格式,接下来我们需要将其转换为年龄。这里我们可以使用 apply 函数和 lambda 表达式来实现:
today = pd.to_datetime('today')
df['Age'] = df['Birthdate'].apply(lambda x: (today.year - x.year) - ((today.month, today.day) < (x.month, x.day)))
首先,我们使用 pd.to_datetime 函数获取当前日期并保存到变量 today 中。
然后,我们使用 apply 函数和 lambda 表达式来遍历 Birthdate 列中的每一个日期,计算出其年龄并将结果保存到 Age 列中。
步骤 4:结果展示
现在,我们已经成功地将 Birthdate 列转换为了 Age 列,可以使用 head 函数来查看前几行数据:
print(df.head())
输出:
SepalLength SepalWidth PetalLength PetalWidth Name \
0 5.1 3.5 1.4 0.2 Iris-setosa
1 4.9 3.0 1.4 0.2 Iris-setosa
2 4.7 3.2 1.3 0.2 Iris-setosa
3 4.6 3.1 1.5 0.2 Iris-setosa
4 5.0 3.6 1.4 0.2 Iris-setosa
Birthdate Age
0 2000-01-01 21
1 2000-01-07 21
2 2000-01-14 21
3 2000-01-21 21
4 2000-01-28 21
可以看到,我们成功地将 Birthdate 列转换为了 Age 列,并且年龄计算正确。
以上就是在 Pandas 中将出生日期转换为年龄的全部步骤。