使用isinstance()判断pandas datetime64[ns]类型失败的问题求助
问题分析与解决方法
问题根源
你用isinstance(df.time, datetime.datetime)返回False的原因很直接:
df.time是pandas Series对象,不是单个的datetime.datetime实例。pd.to_datetime()处理列时,返回的是一个元素类型为datetime64[ns]的Series,而非单个datetime对象。
正确的检测方式
根据你的需求,有两种常见的检测场景:
1. 检测整列是否为datetime类型
可以直接检查列的数据类型,或者用pandas提供的类型判断工具:
import pandas as pd import datetime df = pd.DataFrame({'time':['2021-12-31', '2022-03-31', '2022-06-30'], 'n' : [100, 200, 300]}) df.time = pd.to_datetime(df.time) # 方法1:直接对比列的dtype print(df['time'].dtype == 'datetime64[ns]') # 输出: True # 方法2:用pandas内置的类型检测函数 print(pd.api.types.is_datetime64_any_dtype(df['time'])) # 输出: True
2. 检测列中单个元素是否为datetime类型
如果要验证列里的元素是不是datetime.datetime实例,需要取单个元素来判断:
# 取列中第一个元素进行类型判断 print(isinstance(df.time.iloc[0], datetime.datetime)) # 输出: True # 注:pandas的Timestamp是datetime.datetime的子类,因此isinstance判断会返回True
补充说明
pandas的datetime64[ns]类型底层基于numpy的datetime64数组,但当你取出单个元素时,会自动转换为pandas.Timestamp对象——它继承自Python标准库的datetime.datetime,所以对单个元素做isinstance判断会返回True。
内容的提问来源于stack exchange,提问作者Henri
相关产品推荐
相关产品推荐

