以下似乎至少在某些情况下起作用:
series.dtype == np.dtype('<M8[ns]')
但它看起来并不漂亮,我不确定它是否总是有效(带有所有(?)种时间戳)。
有没有更好的方法来测试列是否包含时间戳?
答案 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