You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas DataFrame用strftime格式化时间失败,仍显示纳秒

Pandas 提取时间并格式化到秒的问题解决

问题描述

现有如下格式的Pandas DataFrame:

0                             1    2    3
0 2010-02-12/08:14:24.280000 0.12 0.45  0.66
1 2010-02-12/08:15:24.333000 0.14 0.55  0.77

需要新增列4,提取列0中的时间数据并格式化为仅保留到秒的格式(%H:%M:%S),预期效果如下:

0                          1     2    3       4
0 2010-02-12/08:14:24.280000   0.12 0.45  0.66  08:14:24
1 2010-02-12/08:15:25.333000   0.14 0.55  0.77  08:15:25

尝试了以下代码,但列4仍然显示纳秒格式:

import pandas as pd

df = pd.read_csv('/home/efw_20100213.csv', header=None)
df[0] = pd.to_datetime(df[0])
df[4] = df[0]
df[4].apply(lambda x: x.strftime("%H:%M:%S"))

解决方法

问题核心是没有将格式化后的结果赋值回列4,同时推荐使用Pandas原生的向量化方法替代apply,效率更高。

正确代码

import pandas as pd

df = pd.read_csv('/home/efw_20100213.csv', header=None)
# 将列0转换为datetime类型
df[0] = pd.to_datetime(df[0])
# 直接对datetime列使用dt.strftime格式化,赋值给列4
df[4] = df[0].dt.strftime("%H:%M:%S")

代码解释

  1. pd.to_datetime(df[0]):把列0的字符串时间转成Pandas的datetime类型,为后续格式化做准备。
  2. df[0].dt.strftime("%H:%M:%S"):通过dt访问器对整个Series做向量化格式化,直接生成仅含时分秒的字符串,比apply的循环操作效率高很多。
  3. 将格式化结果赋值给df[4],此时列4是字符串类型,不会显示纳秒信息。

若坚持使用apply的写法

如果一定要用apply,必须把结果赋值回列4:

import pandas as pd

df = pd.read_csv('/home/efw_20100213.csv', header=None)
df[0] = pd.to_datetime(df[0])
df[4] = df[0].apply(lambda x: x.strftime("%H:%M:%S"))

(注:此方法处理大数据量时效率较低,不推荐)

验证结果

执行正确代码后,DataFrame将符合预期格式:

0                          1     2    3       4
0 2010-02-12/08:14:24.280000   0.12 0.45  0.66  08:14:24
1 2010-02-12/08:15:24.333000   0.14 0.55  0.77  08:15:24

内容的提问来源于stack exchange,提问作者user21064805

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 10:57:42