如何对pandas DataFrame列执行字符串转datetime类型转换
实现方案
报错核心原因是直接把整列pandas.Series对象传给了仅接受单个字符串入参的datetime.strptime,以下是3种可行实现方式,按推荐优先级排序:
优先使用pandas原生向量化方法
pd.to_datetime(性能最优)
这是处理pandas时间列转换的标准方案,原生支持接收Series作为入参,不会有类型不匹配问题,指定匹配的时间格式时转换性能比逐行处理高1~2个数量级,大数据量下优势极其明显:import pandas as pd # 直接转换整列,format参数和strptime的格式规则完全一致 df['Timestamp'] = pd.to_datetime(df['Timestamp'], format='%Y-%m-%d %H:%M:%S.%f')转换完成后该列数据类型为
datetime64[ns],可直接做时间差计算、时间序列筛选、按时间粒度聚合等所有pandas时间相关操作。使用
apply逐元素调用原生datetime.strptime(兼容原有写法)
如果一定要用标准库的strptime逻辑,可以通过apply逐行取出单个字符串值传入函数,避免直接传整列的类型错误:import datetime df['Timestamp'] = df['Timestamp'].apply( lambda x: datetime.datetime.strptime(x, '%Y-%m-%d %H:%M:%S.%f') )注意:这种逐行遍历的写法性能远低于上面的
pd.to_datetime,仅适合小数据集临时使用。直接指定日期类型转换(最简洁,仅适用于完全干净的标准格式数据)
如果时间列100%为标准格式,无脏数据、空值,可以直接用astype做类型转换,写法最简洁:df['Timestamp'] = df['Timestamp'].astype('datetime64[ns]')该方法灵活度最低,只要存在一条不符合格式的记录就会直接报错,不推荐在生产环境/数据源不稳定的场景使用。
结果验证
转换完成后可执行以下代码检查列类型,确认转换生效:
print(df.dtypes)
输出中Timestamp对应类型为datetime64[ns]即代表转换成功。
内容的提问来源于stack exchange,提问作者MVMV
相关产品推荐
相关产品推荐

