Python 无法从包含日期的数据框列中提取年份

Python 无法从包含日期的数据框列中提取年份,python,pandas,Python,Pandas,嗨,我有一个数据框,其中有一列包含日期(请参见下文)。我想从他们每一个人身上提取几年 0 2017-01-25 1 2009-10-22 2 2015-10-21 3 2013-06-26 4 2018-05-16 5 2016-11-09 我试着用这个公式 df['year']=(datetime.strtime(df['Date'],'%Y-%m-%d').year) 但是我得到了下面的错误 Traceback (most recent ca

嗨,我有一个数据框,其中有一列包含日期(请参见下文)。我想从他们每一个人身上提取几年

0     2017-01-25
1     2009-10-22
2     2015-10-21
3     2013-06-26
4     2018-05-16
5     2016-11-09
我试着用这个公式

df['year']=(datetime.strtime(df['Date'],'%Y-%m-%d').year)

但是我得到了下面的错误

Traceback (most recent call last):
  File "<input>", line 1, in <module>
TypeError: strptime() argument 1 must be str, not Series
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
TypeError:strTime()参数1必须是str,而不是Series

如何修复此问题?

您正在将整个列传递给
datetime.strtime()
函数

您需要的是
.apply()
Date
列的每个值应用一个函数以获取其年份,例如:

def get_year(x):
    return datetime.strptime(x, '%y-%m-%d').year

df['year'] = df.Date.apply(get_year)

如果该列中的每个字符串都与该日期格式匹配,则您甚至不需要在此处使用datetime:

import pandas as pd

df = pd.DataFrame(dict(
    Date = [
        '2017-01-25','2009-10-22','2015-10-21',
        '2013-06-26','2018-05-16','2016-11-09',
    ]
))

df['year'] = df['Date'].str.split('-',1,True)[0].astype(int)
print(df)

输出:

         Date  year
0  2017-01-25  2017
1  2009-10-22  2009
2  2015-10-21  2015
3  2013-06-26  2013
4  2018-05-16  2018
5  2016-11-09  2016


我想你可以转换日期和时间,用
dt
计算年份

 df['year'] = pd.to_datetime(df['Date'], format='%Y-%m-%d').dt.year

我该如何解决这个问题?这个错误对我来说很清楚,不是吗?你做过调试和研究吗?请提供一个。谢谢你是对的,我通过了整个专栏,这是问题。我已将您的答案压缩为lambda格式,因为这个df1['year1']=df1['EffectiveDate'].apply(lambda x:datetime.strtime(x,%Y-%M-%d').year)是@user13412850我发现lambda函数更容易键入,但更难阅读。您还可以使用
df1.EffectiveDate
而不是
df1['EffectiveDate']
使其更干净。