2017-02-03 29 views
1

這一直對我來說,但幾天前開始我得到奇怪的結果。熊貓to_timedelta函數似乎將數據轉換爲0

my_list = [1,2,3,4,5] 
my_series = pd.Series(my_list) 
print pd.to_timedelta(my_series) 

剛剛返回

0 00:00:00:000000 
1 00:00:00:000000 
2 00:00:00:000000 
3 00:00:00:000000 
4 00:00:00:000000 

誰能告訴我是怎麼回事?

編輯: 在我實際的代碼我用

df['col'].astype(int, inplace = True) 

調用to_timedelta函數之前改變了我的(即將timedelta)列整數。我真的應該一直在做

new_col = pd.to_numeric(df['col']) 

然後在new_col上調用to_timedelta。也許有人可以闡明爲什麼會這樣。

回答

4

to_timedelta默認的單位是「NS」,請參考文檔或函數原型:

def to_timedelta(arg, unit='ns', box=True, errors='raise', coerce=None): 

所以你剛纔生成1至5 naoseconds三角洲和顯示也沒有這麼深。

這很可能是你選錯了單位,將單位='對你有用的東西'傳遞給函數。

編輯解釋更多OP的評論

通過使用合適的單位,你會得到你所期望的:

pd.to_timedelta(my_series, unit='D') 
Out[415]: 
0 1 days 
1 2 days 
2 3 days 
3 4 days 
4 5 days 
dtype: timedelta64[ns] 

仍然在該系列中的對象的類型是timedelta[ns]是內部對象的表示。括號內的ns是爲了提醒你,timedelta對象的精度範圍縮小到納秒。

如果我參加的第一個元素的原始內在價值,我覺得納秒:

pd.to_timedelta(my_series, unit='D')[0].delta 
Out[425]: 86400000000000 
+0

這的確是這樣的,最低值是1000,以便timedelta註冊此 – EdChum

+1

@EdChum:很好,「顯示」,而不是「註冊」 - 他們仍然在_there_中,在「pd.to_timedelta(my_series).dt.nanoseconds」中。 :-) – DSM

+0

@DSM啊是的,這是真的我只是看着輸出沒有考慮timedelta屬性 – EdChum

相關問題