0

0

pandas 如何一次性把多列转为 datetime 类型(带错误处理)

舞姬之光

舞姬之光

发布时间:2026-01-23 20:37:51

|

762人浏览过

|

来源于php中文网

原创

应逐列调用pd.to_datetime或用apply包裹,推荐df[['col_a','col_b','col_c']] = df[['col_a','col_b','col_c']].apply(pd.to_datetime, errors='coerce', format='mixed'),其中format='mixed'自动适配多种格式,errors='coerce'将异常值转为NaT。

pandas 如何一次性把多列转为 datetime 类型(带错误处理)

直接用 pd.to_datetime 处理多列,但别传 DataFrame 整体

pd.to_datetime 本身不支持直接传入 DataFrame 并自动广播到所有列——那样会报 TypeError: arg must be a string, datetime, list, tuple, 1-d array, or Series。正确做法是逐列调用,或用 apply 包裹。

推荐用 apply + pd.to_datetime 组合,简洁且可控:

df[['col_a', 'col_b', 'col_c']] = df[['col_a', 'col_b', 'col_c']].apply(
    pd.to_datetime, errors='coerce', format='mixed'
)

其中 format='mixed' 让 pandas 自动试探多种常见格式(如 '2023-01-01''01/01/2023''2023-01-01 10:30:00'),比留空 format=None(默认)略快,又比硬写死 format='%Y-%m-%d' 更鲁棒。

errors='coerce' 是必须项,别用 'raise' 或默认

多列混杂脏数据时,errors='raise'(默认行为)会让整条转换失败并中断,哪怕只有一格是 'N/A' 或空字符串;而 errors='coerce' 会把无法解析的值统一转为 NaT(datetime 的 NaN),保留其他有效值。

常见错误场景包括:

  • Excel 导出后出现 'NULL''#N/A' 字符串
  • 用户手工填写的 '--''/'、空白单元格被读成 ''float('nan')
  • 同一列里混着 '2023-01-01''Jan 1, 2023'

所以务必显式写上 errors='coerce',避免静默失败或意外中断。

Kive
Kive

一站式AI图像生成和管理平台

下载

注意 apply 的 axis 和返回类型,别漏掉赋值

df[col_list].apply(pd.to_datetime, ...) 默认按列(axis=0)执行,返回仍是 DataFrame,每列变成 datetime64[ns] 类型——这是期望行为。

容易出错的点:

  • 忘了把结果赋回原 DataFrame:df[col_list] = ... 这一步不能省,否则原 df 不变
  • 误用 axis=1:会导致每行拼成一个对象,结果是 object 类型,完全失效
  • 对含时区的列没加 utc=True:如果原始字符串带时区(如 '2023-01-01 10:30:00+08:00'),需加 utc=True 统一转为 UTC 时间戳,否则时区信息丢失

性能敏感时,避免 apply,改用列表推导 + pd.to_datetime

当列数多(比如 >10 列)、每列数据量大(>100 万行)时,apply 有额外函数调用开销。此时可手动循环列名,单列调用更高效:

for col in ['col_a', 'col_b', 'col_c']:
    df[col] = pd.to_datetime(df[col], errors='coerce', format='mixed')

它比 apply 快 10%–30%,且更容易插日志或做列级判断(例如跳过已为 datetime64 类型的列)。

真正麻烦的是混合格式列:比如某列前 90% 是 '%Y-%m-%d',后 10% 是 '%d/%m/%Y'format='mixed' 会 fallback 到慢路径,此时得先清洗或分批处理——这点常被忽略。

相关专题

更多
Python 时间序列分析与预测
Python 时间序列分析与预测

本专题专注讲解 Python 在时间序列数据处理与预测建模中的实战技巧,涵盖时间索引处理、周期性与趋势分解、平稳性检测、ARIMA/SARIMA 模型构建、预测误差评估,以及基于实际业务场景的时间序列项目实操,帮助学习者掌握从数据预处理到模型预测的完整时序分析能力。

54

2025.12.04

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

358

2023.08.02

css中float用法
css中float用法

css中float属性允许元素脱离文档流并沿其父元素边缘排列,用于创建并排列、对齐文本图像、浮动菜单边栏和重叠元素。想了解更多float的相关内容,可以阅读本专题下面的文章。

573

2024.04.28

C++中int、float和double的区别
C++中int、float和double的区别

本专题整合了c++中int和double的区别,阅读专题下面的文章了解更多详细内容。

100

2025.10.23

c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

233

2023.09.22

java中null的用法
java中null的用法

在Java中,null表示一个引用类型的变量不指向任何对象。可以将null赋值给任何引用类型的变量,包括类、接口、数组、字符串等。想了解更多null的相关内容,可以阅读本专题下面的文章。

437

2024.03.01

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

699

2023.07.31

python中的format是什么意思
python中的format是什么意思

python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

431

2024.06.27

c++空格相关教程合集
c++空格相关教程合集

本专题整合了c++空格相关教程,阅读专题下面的文章了解更多详细内容。

0

2026.01.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Excel 教程
Excel 教程

共162课时 | 13.1万人学习

成为PHP架构师-自制PHP框架
成为PHP架构师-自制PHP框架

共28课时 | 2.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号