如何将Pandas DataFrame倒数第三列列名转为m/d/y日期格式?
问题描述
现有Pandas DataFrame结构如下:
| Sector | Apr 2022 | May 2022 | Jun 2022 | 1Y Min | 1Y Max |
|---|---|---|---|---|---|
| A | 10 | 05 | 12 | 05 | 05 |
| B | 18 | 20 | 09 | 09 | 09 |
| C | 02 | 09 | 12 | 02 | 02 |
需求说明:
- 最后两列
1Y Min、1Y Max列名固定 - 前几列日期列名格式为
%b %Y(如Apr 2022),会随最新月份动态变化 - 需要将倒数第三列(对应最新月份的列)的列名修改为
m/d/y格式(如6/30/2022,即当月最后一天)
预期结果:
| Sector | Apr 2022 | May 2022 | 6/30/2022 | 1Y Min | 1Y Max |
|---|---|---|---|---|---|
| A | 10 | 05 | 12 | 05 | 05 |
| B | 18 | 20 | 09 | 09 | 09 |
| C | 02 | 09 | 12 | 02 | 02 |
现有代码上下文:
df.columns = pd.Series(df.columns[:-2]).apply(lambda x: x.strftime('%b %Y')).to_list() + ["1Y Min", "1Y Max"]
曾尝试的无效代码:
df[df[-3]] = pd.to_datetime[df[df[-3]].apply(lambda x: x.strftime('%b %Y')
解决方案
直接操作列名列表,定位倒数第三列并修改格式即可,代码如下:
# 获取当前列名的列表 cols = df.columns.tolist() # 提取倒数第三列的列名,解析为日期对象 target_col_name = cols[-3] date = pd.to_datetime(target_col_name) # 获取该月最后一天,格式化为m/d/y格式(无前置零) last_day = date + pd.offsets.MonthEnd(0) new_col_name = f"{last_day.month}/{last_day.day}/{last_day.year}" # 更新列名列表并重新赋值给DataFrame cols[-3] = new_col_name df.columns = cols
代码说明:
cols = df.columns.tolist():将列名转为列表,方便修改单个元素pd.to_datetime(target_col_name):把Jun 2022这类字符串转成可操作的datetime对象date + pd.offsets.MonthEnd(0):自动计算该月份的最后一天(比如Jun 2022对应6/30/2022)- 用字符串拼接生成
m/d/y格式的列名,避免跨系统的前置零格式问题(如果需要保留前置零,改用last_day.strftime("%m/%d/%Y")即可)
内容的提问来源于stack exchange,提问作者Saanchi
相关产品推荐
相关产品推荐

