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

优化DataFrame日期行值编辑替换,转为m/yy格式

问题描述

我有一个包含datetime格式数据的DataFrame,输入数据如下:

import pandas as pd
data = pd.DataFrame({
    'A': ['abc','bcd'], 
    'B': [pd.to_datetime('1/1/18 0:00'), 'apples'], 
    'C': [pd.to_datetime('1/2/18 0:00'),'mangoes'], 
    'D': [pd.to_datetime('1/3/18 0:00'),'orange'],
    'E': [pd.to_datetime('1/4/18 0:00'),'plantain'],
    'F': [pd.to_datetime('1/5/18 0:00'),'plantain'],
    'G': [pd.to_datetime('1/6/18 0:00'),'red'],
    'H': [pd.to_datetime('1/2/18 0:00'),'green']
})

(注:用pd.to_datetime展示输入文件中的日期格式)

我的目标是将第一行的日期从1/1/18(m-d-yy)格式转换为1/18(m/yy)格式的字符串,替代原有数据。我尝试过手动赋值的方法:

data.loc[0,['B']]='1-2018'
data.loc[0,['C']]='2-2018'
data.loc[0,['D']]='3-2018'
...

这种方法可行但代码冗余,若日期跨度达3-4年,手动编写所有月份和年份会非常繁琐。请问是否有更优方案?


解决方案

无需手动赋值或循环,直接利用pandas的dt.strftime()方法即可批量处理日期格式转换,高效且简洁:

核心思路

针对第一行的datetime类型数据,直接调用dt.strftime()方法指定目标格式,批量替换原数据,不会影响其他行的字符串内容。

代码实现

# 筛选需要处理的列(从B到H列)
target_cols = data.columns[1:]

# 批量转换日期格式为m/yy(%m输出两位月份,如01/18)
data.loc[0, target_cols] = data.loc[0, target_cols].dt.strftime('%m/%y')

# 若需要输出一位月份(如1/18),根据操作系统调整格式:
# Linux/macOS 用:
# data.loc[0, target_cols] = data.loc[0, target_cols].dt.strftime('%-m/%y')
# Windows 用:
# data.loc[0, target_cols] = data.loc[0, target_cols].dt.strftime('%#m/%y')

执行结果

转换后第一行的日期会被统一格式化为目标字符串,第二行的文本数据保持不变:

A     B      C      D      E      F      G      H
0  abc  01/18  02/18  03/18  04/18  05/18  06/18  02/18
1  bcd  apples mangoes orange plantain plantain    red  green

补充说明

  • dt.strftime()是pandas专为datetime类型数据设计的格式化方法,支持所有标准的日期格式符,完全覆盖各种日期转换需求
  • 该方法只会对datetime类型的数据生效,混合类型列中的字符串内容不会被修改,完美适配你的DataFrame场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 07:55:20