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

Pandas中循环修改DataFrame日期时间列无效,如何永久修改格式?

解决Pandas DataFrame日期时间列格式永久修改的问题

嘿,我懂你碰到的麻烦了——直接用for循环遍历df["Datetime"]的时候,你修改的只是每个元素的副本,完全不会影响原DataFrame里的数据。这是Pandas的特性决定的,咱们换几种更靠谱的方法来实现你的需求:

方法1:用apply函数自定义处理逻辑

apply可以对列里的每个元素应用你的自定义函数,而且能直接修改原列(或者生成新列)。把你的处理逻辑打包成一个函数,传给apply就行:

import re
import datetime
import pandas as pd

# 定义处理单个日期字符串的函数
def format_datetime(s):
    # 去掉开头的星期字符串
    s_clean = re.sub("^[^ ]* ","", s)
    # 转换格式:dd.mm.yyyy HH:mm → yyyy-mm-dd HH:mm
    return datetime.datetime.strptime(s_clean, "%d.%m.%Y %H:%M").strftime("%Y-%m-%d %H:%M")

# 直接修改原Datetime列
df["Datetime"] = df["Datetime"].apply(format_datetime)

方法2:用Pandas矢量化操作(更高效)

如果你的数据量很大,矢量化操作比apply更快,尽量用Pandas内置的字符串和日期处理函数:

import pandas as pd

# 第一步:去掉开头的星期字符串(用str.replace的正则匹配)
df["Datetime"] = df["Datetime"].str.replace("^[^ ]* ", "", regex=True)
# 第二步:转换为datetime类型,再输出成指定格式
df["Datetime"] = pd.to_datetime(df["Datetime"], format="%d.%m.%Y %H:%M").dt.strftime("%Y-%m-%d %H:%M")

为什么原来的for循环没用?

简单说,当你写for i in df["Datetime"]时,每次循环的i都是从列里取出的字符串副本——你修改i的值,只是改变了这个临时变量,原DataFrame里的对应单元格根本没被更新。Pandas的列元素不是可直接原地修改的引用,所以必须通过赋值的方式把修改后的结果写回列里。

修改完之后,你可以用print(df["Datetime"].head())验证一下,日期格式应该已经变成你想要的yyyy-mm-dd HH:mm啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:53:07