如何在DataFrame中从年(yyyy)月(m)列生成yyyymm格式列
问题描述
现有DataFrame数据示例如下:
| Year | Month | Year_mnth |
|---|---|---|
| 1942 | 1 | 194201 |
| 1942 | 2 | 194202 |
| 1942 | 3 | 194203 |
| ... | ... | ... |
| 1942 | 10 | 194210 |
| 1942 | 11 | 194211 |
| 1942 | 12 | 194212 |
需要从Year(四位年份格式)和Month(单/双位数字格式)列生成yyyymm格式的Year_mnth列,核心需求是给单数字月份补零以统一格式。
解决方案
方法1:字符串补零拼接
将年份转为字符串,月份转为字符串后用zfill(2)补零,再直接拼接:
import pandas as pd # 假设df是你的目标DataFrame df['Year_mnth'] = df['Year'].astype(str) + df['Month'].astype(str).str.zfill(2)
str.zfill(2)会自动给长度不足2的字符串左侧补零,比如单数字月份1会转为'01',双数字月份10保持'10'不变。
方法2:f-string格式化拼接
利用f-string的格式控制语法,直接对月份进行补零处理:
df['Year_mnth'] = df.apply(lambda row: f"{row['Year']}{row['Month']:02d}", axis=1)
{row['Month']:02d}表示将月份格式化为两位整数,不足两位时自动在左侧补零。
方法3:借助日期格式转换
先将Year和Month组合成有效日期(指定日期为1号),再提取yyyymm格式的字符串:
df['Year_mnth'] = pd.to_datetime(df[['Year', 'Month']].assign(Day=1)).dt.strftime('%Y%m')
这种方法不仅能生成目标格式,还能自动校验日期合法性(比如月份超出1-12范围时会抛出错误)。
内容的提问来源于stack exchange,提问作者Nenagh2023
相关产品推荐
相关产品推荐

