优化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
相关产品推荐
相关产品推荐

