如何检查pandas系列是否包含时间戳?

时间:2017-07-08 16:22:41

标签: python pandas

以下似乎至少在某些情况下起作用:

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

但它看起来并不漂亮,我不确定它是否总是有效(带有所有(?)种时间戳)。

有没有更好的方法来测试列是否包含时间戳?

2 个答案:

答案 0 :(得分:8)

试试这应该有效:

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)

答案 1 :(得分:2)

@ shivsn答案中的方法更简单,更有可能更好。这是一种更难以提供信息的方式。

有关dtypes的更多详细信息,请参阅here。但简而言之,dtype字符串的第二个字符应该是&#39; M&#39;对于日期时间和&#39; m&#39;对于Timedelta。因此,您可以测试dtype.str[1] == 'M'仅检测日期时间,或dtype.str[1].lower() == 'm'检测日期时间或时间点。

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