2013-02-28 99 views
2

我一直在與Pandas合作來計算特定夾具上運動員的年齡,雖然它是作爲TimeSeries類型返回的。如何將Pandas中的TimeSeries對象轉換爲整數?

我現在想繪製與固定日期相對的年齡(以天爲單位),但無法計算出如何將TimeSeries對象轉換爲整數。誰能幫忙?

這是數據的形狀。

squad_date['mean_age'] 
2008-08-16  11753 days, 0:00:00 
2008-08-23  11760 days, 0:00:00 
2008-08-30  11767 days, 0:00:00 
2008-09-14  11782 days, 0:00:00 
2008-09-20  11788 days, 0:00:00 

這是我想什麼:

2008-08-16  11753 
2008-08-23  11760 
2008-08-30  11767 
2008-09-14  11782 
2008-09-20  11788 
+0

你能發佈創建這個TimeSeries的代碼嗎? – HYRY 2013-02-28 12:33:24

回答

2

你需要在主這個(0.11-DEV)

In [40]: x = pd.date_range('20130101',periods=5) 

In [41]: td = pd.Series(x,index=x)-pd.Timestamp('20130101') 

In [43]: td 
Out[43]: 
2013-01-01   00:00:00 
2013-01-02 1 days, 00:00:00 
2013-01-03 2 days, 00:00:00 
2013-01-04 3 days, 00:00:00 
2013-01-05 4 days, 00:00:00 
Freq: D, Dtype: timedelta64[ns] 

In [44]: td.apply(lambda x: x.item().days) 
Out[44]: 
2013-01-01 0 
2013-01-02 1 
2013-01-03 2 
2013-01-04 3 
2013-01-05 4 
Freq: D, Dtype: int64 
0

的方式我做到了:

def conv_delta_to_int (dt): 
    return int(str(dt).split(" ")[0].replace (",", "")) 

squad_date['mean_age'] = map(conv_delta_to_int, squad_date['mean_age']) 
3

對於那些通過google找到這篇文章的人來說,如果你有nump y> = 0.7和熊貓0.11,這些解決方案將無法正常工作。什麼工作:

squad_date['mean_age'].apply(lambda x: x/np.timedelta64(1,'D')) 

官方熊貓文檔可能會在這裏混淆。他們建議做「x.item()」,其中x已經是timedelta對象。 x.item()會從timedelta對象中檢索出一個int值的差異。如果那是'ns',例如你會得到一個納秒數的int值。所以這會給timedelta錯誤一個整數除法;將timedeltas直接相互分開確實有效(並將其轉換爲Days,如第二部分中的'D'所示)。

我希望這將有助於未來的人!

相關問題