我正在使用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转换为有效属性以使用该函数,因为我打算使用它?
感谢。
答案 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
。