Pandas df.dtypes无法正确识别带多时区的Timestamp列类型?
问题解答
为什么混合时区的Timestamp列会显示为object类型?
是的,Pandas的datetime64[tz]类型要求列内所有元素的时区必须统一。当列中存在带不同时区的Timestamp实例时,Pandas无法将列统一为强类型的datetime64,只能将列的 dtype 泛化为object,以此容纳不同时区的Timestamp对象。
如何正确识别列中的Timestamp类型?
可以通过以下几种方式处理:
- 查看元素具体类型:直接提取元素或批量查看列内元素的类型,比如:
# 查看单元素类型 type(df['created'].iloc[0]) # 查看列内所有元素的唯一类型 df['created'].map(type).unique() - 用工具推断逻辑类型:使用
pd.api.types.infer_dtype()可以更精准地推断列的实际内容类型,它会识别出这是带混合时区的datetime:pd.api.types.infer_dtype(df['created'], skipna=True) # 返回结果:'datetime' - 统一时区恢复强类型:如果业务场景允许,可将所有时间转换为同一时区(比如UTC),此时列会自动转为标准的
datetime64[ns, tz]类型:df['created'] = df['created'].dt.tz_convert('UTC') # 执行后df.dtypes会显示:created datetime64[ns, UTC]
内容的提问来源于stack exchange,提问作者Fabian Werner
相关产品推荐
相关产品推荐

