未找到ipython日期属性

时间:2015-08-22 05:58:30

标签: python pandas ipython ipython-notebook

我正在使用ipython notebook使用pandas运行一些分析。但是,我遇到了以下功能和日期属性的问题

def get_date(time_unit):
    t = tickets['purchased date'].map(lambda x: x.time_unit)
    return t

# calling it like this produces this error
get_date('week')

AttributeError: 'Timestamp' object has no attribute 'time_unit'

但这没有功能

tickets['purchased date'].map(lambda x: x.week)

我正在尝试创建函数get_date(time_unit),因为我稍后需要将该函数用于get_date('week')以及之后的get_date('year')等等。

如何将字符串im转换为有效属性以使用该函数,因为我打算使用它?

感谢。

2 个答案:

答案 0 :(得分:2)

您应该使用getattr按名称检索属性。

def get_date(time_unit):
    t = tickets['purchased date'].map(lambda x: getattr(x, time_unit))
    return t

get_date('week')

您所做的相当于getattr(x, 'time_unit')

答案 1 :(得分:2)

当你这样做时 -

t = tickets['purchased date'].map(lambda x: x.time_unit)

这不会取代time_unit字符串中的任何内容并取x.week,而是会尝试使用x的time_unit属性,这会导致您看到的错误。

您应该使用getattr使用属性的字符串名称从对象获取属性 -

t = tickets['purchased date'].map(lambda x: getattr(x, time_unit))

来自documentation of getattr() -

  

getattr(对象,名称[,默认])

     

返回object的named属性的值。 name必须是一个字符串。如果字符串是对象属性之一的名称,则结果是该属性的值。例如, getattr(x, 'foobar')相当于x.foobar