使用日期时间库提取多个列的年份

时间:2018-04-12 14:25:18

标签: python datetime dataframe

我想创建一个遍历Pandas Dataframe的函数,并按以下格式转换所有日期变量:%b-%Y,例如:Jun-2017,{{ 1}},Apr-2017等,用于每个注册表中当前年份和日期之间的差异(例如:May-2017)。

我的功能是:

2018 - year_corresponding_to_each_registry

我遇到以下问题:

def date_to_numeric(df):
  for col in dates:
    print("Converting date variables to years: " + col, flush = True)
    df[col] = df[col].apply(pd.to_datetime, format = '%b-%Y', errors = 'coerce')     
    df[col] = df[col].apply(dt.year)
  return df

我收到以下错误消息:

df[col] = df[col].apply(dt.year)

Pd积。我使用以下行代码导入了datetime库:

AttributeError: module 'datetime' has no attribute 'year'

提前感谢您提供有关如何以有效方式完成此任务的任何帮助。

  

ANSWER

感谢@DeepSpace的回答(请在下方检查,标记为正确答案):

import datetime as dt

2 个答案:

答案 0 :(得分:2)

你的代码过于复杂,即使它有效。

df = pd.DataFrame({'a': ['Jun-2017', 'Apr-2017', 'Jan-2015']})

print(df)

#            a
#   0  Jun-2017
#   1  Apr-2017
#   2  Jan-2015

df['b'] = 2018 - pd.to_datetime(df['a']).dt.year

print(df)

#             a  b
#   0  Jun-2017  1
#   1  Apr-2017  1
#   2  Jan-2015  3

这将按列方式工作(即需要在每个列上单独执行),并且只有在列中的所有元素都可以解析为日期时才有效。如果您的实际数据不是这种情况,则需要考虑到这一点(例如将errors='coerce'传递给pd.to_datetime

df = pd.DataFrame({'a': ['Jun-2017', 'Apr-2017', 'Jan-2015', 'i am not a date']})
df['b'] = 2018 - pd.to_datetime(df['a'], errors='coerce').dt.year

print(df)
#                   a    b
#  0         Jun-2017  1.0
#  1         Apr-2017  1.0
#  2         Jan-2015  3.0
#  3  i am not a date  NaN

答案 1 :(得分:0)

尝试:

import datetime as dt 
import pandas as pd

df[col] = pd.to_datetime(df[col], format="%b-%Y")            #Convert to date object
print(df[col].apply(lambda x: dt.datetime.now().year - x.year))     #Sub from current year.