如何将t.series的datetime64[ns]转为datetime.datetime后与CSV日期对象合并
报错原因
你遇到的报错是因为两张表用于关联的Date列数据类型不匹配:
- BaseDate的
Date列是存储datetime.datetime实例的object类型 - is_EOM_QOM的
Date列是pandas原生的datetime64[ns]类型
pandas的merge操作要求关联键的类型一致,因此触发了该报错。
解决方案
按照你倾向于将datetime64[ns]转换为datetime.datetime(object类型)的需求,直接修改is_EOM_QOM的Date列即可:
# 将datetime64[ns]类型转换为datetime.datetime实例组成的object类型 is_EOM_QOM['Date'] = is_EOM_QOM['Date'].dt.to_pydatetime() # 再执行原merge逻辑即可正常运行 BaseDate.merge(is_EOM_QOM, left_on='Date', right_on='Date', how='left')
补充说明
- 转换后可执行
BaseDate['Date'].dtype和is_EOM_QOM['Date'].dtype校验类型,两者均为object且元素均为datetime实例即可正常关联 - 如果后续没有必须使用object类型存储时间的硬性要求,更推荐在读取CSV时就通过
pd.read_csv(..., parse_dates=['Date'])将BaseDate的Date列统一转为datetime64[ns]类型,该类型的时间计算、存储性能都优于object类型的datetime实例 - 报错提示的
pd.concat方案仅适用于两张表行数、行顺序完全一致,不需要按值匹配关联的场景,你需要左连接的场景下转类型后用merge更符合需求
内容的提问来源于stack exchange,提问作者Justin
相关产品推荐
相关产品推荐

