2015-08-22 50 views
0

使用ipython筆記本來運行使用熊貓的一些分析。但是,即時通訊運行與下面的函數,日期問題屬性未找到ipython日期屬性

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

當你這樣做 -

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

這不會取代任何是time_unit字符串內,並採取x.week,而是會嘗試採取time_unit屬性x的,這是造成你所看到的錯誤。

您應該使用getattr使用屬性的字符串名稱來得到一個對象的屬性 -

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

documentation of getattr() -

GETATTR(對象名稱[,默認值])

返回對象的指定屬性的值。名稱必須是字符串。如果字符串是對象屬性之一的名稱,則結果是該屬性的值。例如,getattr(x, 'foobar')相當於x.foobar

+0

哦,我在看setattr(),但無法弄清楚如何正確使用它,結果我使用了不正確的幫手。 – Joseph

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')