2015-08-27 48 views
2

我對pandas處理與時間相關的對象的方式感到困惑。在熊貓中混淆日期時間對象

如果我做

x = pd.datetime.fromtimestamp(1440502703064/1000.) # or 
x = pd.datetime(1234,5,6) 
在任何一種情況下

然後type(x)回報datetime.datetime。但是,如果我有:

z = pd.DataFrame([ 
    {'a': 'foo', 'ts': pd.datetime.fromtimestamp(1440502703064/1000.)} 
    ]) 

然後type(z['ts'][0])返回pandas.tslib.Timestamp。這個演員什麼時候發生?其觸發器是pandas還是numpy?在後一種情況下我得到了什麼樣的這種類型,以及它在哪裏記錄?

回答

1

我不是100%確定的,因爲我沒有研究過底層代碼,但datetime.datetime的轉換髮生在值「合併」到DataFrame的那一刻。

DataFrame之外,熊貓會嘗試做一些聰明的事情,並在使用pd.dattime(.fromtimestamp)時返回一些合理的結果:它返回一個Python datetime.datetime對象。

裏面,它使用的東西可能會更好地在內部工作。你可以看到發生轉換使用datetime.datetime對象,而不是創建一個DataFrame時:

>>> from datetime import datetime 
>>> z = pd.DataFrame([ 
     {'a': 'foo', 'ts': datetime(2015,8,27)} ]) 
>>> type(z['ts'][0]) 
pandas.tslib.Timestamp 

也許更加清晰:

>>> pd.datetime == datetime 
True 

所以轉換DataFrame初始化過程中會發生。

至於文檔,我周圍中搜索,發現source(注:可能不是一個很費時間的安全鏈接),它說(DOC字符串):

時間戳大熊貓相當於Python的日期時間的並且在大多數情況下可以與其互換使用 。這是用於構成DatetimeIndex的 條目的類型,以及面向 熊貓中的數據結構的其他時間序列。

+0

聽起來不錯。所以'TimeStamp'是一種內部未記錄的對象。大:( – Dror

+0

以及它將有助於閱讀大量的文檔:http://pandas.pydata.org/pandas-docs/stable/timeseries.html和http://pandas.pydata.org/pandas-docs/stable/ basics.html#dtypes – Jeff