如何移除df中日期的时分秒,仅提取并保留年和月?

解决方案
以下是pandas DataFrame场景下的可行实现方案,按需选择即可:
- 首先统一预处理:先将日期列转为标准datetime类型,避免原始列为字符串类型导致操作失效
import pandas as pd # 转换日期列格式,errors='coerce'会把无法解析的异常日期转为空值NaT df['your_date_col'] = pd.to_datetime(df['your_date_col'], errors='coerce')
- 方案1:输出字符串格式的年月(格式为
YYYY-MM,适合导出、展示场景)
df['year_month'] = df['your_date_col'].dt.strftime('%Y-%m') # 如果需要直接覆盖原日期列,把'year_month'替换为原列名即可
- 方案2:输出Period时间类型的年月(适合后续做时间序列计算、分组聚合场景)
df['year_month'] = df['your_date_col'].dt.to_period('M')
- 方案3:仅调整显示效果,不修改原始数据类型
如果不需要修改存储的数据,只需要在打印df的时候隐藏时分秒,可以修改pandas全局显示配置:
pd.set_option('display.datetime_format', '%Y-%m')
- 特殊场景方案:如果你的日期列是字符串格式且不想转datetime,且固定为
YYYY-MM-DD HH:MM:SS的格式,可以直接切割字符串取前7位:
df['year_month'] = df['your_date_col'].str[:7]
常见失效原因排查
- 执行dt相关方法时报错:基本都是因为日期列是object字符串类型,必须先执行
pd.to_datetime转换后再操作 - 转换后还是显示时分秒:检查是否是用了strftime方法后又被自动转成了datetime类型,确认输出列的dtype符合预期
内容的提问来源于stack exchange,提问作者Aldy
相关产品推荐
相关产品推荐

