如何在Python Pandas中将含日期时间与NaN的Object列转为datetime64日期列
在Pandas中将带时区的字符串日期转换为仅保留日期的datetime64类型
实现步骤
- 解析字符串为datetime类型:用
pd.to_datetime()处理COL2列,通过errors='coerce'自动兼容NaN和无效格式,得到带时区的datetime对象(原NaN值转为Pandas的缺失datetime标识NaT)。 - 保留日期部分并维持datetime64类型:用
dt.normalize()或dt.floor('D')将时间部分置为当日午夜,既保留datetime64类型,又仅展示日期信息。
完整代码示例
import pandas as pd # 模拟你的DataFrame(包含更多列时直接替换为你的实际DataFrame即可) df = pd.DataFrame({ 'COL1': ['abc', 'ddd', 'bbb'], 'COL2': ['2019-11-12T20:15:08+030', '2019-12-01T22:14:11+030', pd.NA], 'OTHER_COL': [1, 2, 3] # 示例其他列 }) # 第一步:转换COL2为datetime类型,自动处理缺失/无效值 df['COL2'] = pd.to_datetime(df['COL2'], errors='coerce') # 第二步:提取日期部分(两种方法二选一) df['COL2'] = df['COL2'].dt.normalize() # 将时间重置为当日午夜 # df['COL2'] = df['COL2'].dt.floor('D') # 向下取整到天,效果与normalize一致 # 查看结果 print(df)
关键说明
- 转换后COL2的类型为
datetime64[ns],符合需求;原NaN值在显示时仍为NaN。 - 若需移除时区信息,可在转换后追加
.dt.tz_localize(None):df['COL2'] = pd.to_datetime(df['COL2'], errors='coerce').dt.tz_localize(None).dt.normalize()
内容的提问来源于stack exchange,提问作者dingaro
相关产品推荐
相关产品推荐

