2017-07-08 65 views
3

繼似乎在某些情況下至少工作:如何檢查熊貓系列是否包含時間戳?

series.dtype == np.dtype('<M8[ns]') 

,但它並不十分好看,我不知道,如果它的工作原理總是(所有()種時間戳的?)。

是否有更好的方式來測試列是否包含時間戳?

回答

3

試試這個它應該工作:

pd.core.dtypes.common.is_datetime_or_timedelta_dtype(series) 

如果你通過pd.core.dtypes.common.is_你會發現檢查時間戳很多選擇。如果你想結合他們,那麼你可以使用邏輯運算符,如:

pd.core.dtypes.common.is_datetime64_ns_dtype(ser)|pd.core.dtypes.common.is_timedelta64_ns_dtype(ser) 
2

@ shivsn的答案是更簡單,最有可能更好。儘管如此,這可能是一個很難的方法,但可能會提供信息。

有關dtypes的更多詳細信息,請參閱here。但簡而言之,dtype字符串的第二個字符應該是'M'表示Datetime,'m'表示Timedelta。因此,您可以測試dtype.str[1] == 'M'以僅檢測Datetime或dtype.str[1].lower() == 'm'以檢測Datetime或Timedelta。

>>> dr = pd.date_range('1-1-2017',periods=4,freq='d') 
>>> df = pd.DataFrame({ 'i':range(3), 'x':[1.1,2.2,3.3], 
         'ts':dr[:3], 'td':dr[1:]-dr[:3] }) 

    i  td   ts x 
0 0 1 days 2017-01-01 1.1 
1 1 1 days 2017-01-02 2.2 
2 2 1 days 2017-01-03 3.3 

>>> for v in df.columns: 
     print('\ncolumn ' + v + ': ') 
     print('dtype.str: ', df[v].dtype.str) 
     print('dtype:  ', df[v].dtype) 
     print('timestamp? ', df[v].dtype.str[1] == 'M') 

column i: 
dtype.str: <i8 
dtype:  int64 
timestamp? False 

column td: 
dtype.str: <m8[ns] 
dtype:  timedelta64[ns] 
timestamp? False 

column ts: 
dtype.str: <M8[ns] 
dtype:  datetime64[ns] 
timestamp? True 

column x: 
dtype.str: <f8 
dtype:  float64 
timestamp? False