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

Python Pandas按月份筛选多列日期并生成对应列的技术求助

解决多列日期按月份归类到新列的问题

我来帮你搞定这个多列日期分类的需求!你之前的代码只能处理单列,还碰到了日期格式错乱的问题,咱们一步步来解决:

第一步:统一日期格式(解决格式错乱问题)

首先得把所有日期列转换成标准的datetime格式,这样才能准确识别月份。用pandas的to_datetime方法,还能自动处理格式不统一的情况,把无效的日期转成NaT(空日期值):

import pandas as pd

# 读取你的输入文件(根据实际文件格式调整,比如Excel就用read_excel)
sf = pd.read_csv('your_input_file.csv')

# 筛选所有日期列:如果你的日期列是特定范围(比如第2到31列),可以改成sf.columns[1:31]
date_cols = sf.columns

# 遍历每一列,转换为标准datetime格式
for col in date_cols:
    sf[col] = pd.to_datetime(sf[col], errors='coerce')

第二步:创建目标新列并填充对应月份日期

接下来我们创建May和June两个新列,然后遍历所有日期列,把对应月份的日期填充进去。这里分两种场景:

场景1:每行只保留一个5月/6月日期(优先取第一个遇到的)

如果你的数据每行最多只有一个5月日期和一个6月日期,用这种方式更高效:

# 初始化新列为空日期值
sf['May'] = pd.NaT
sf['June'] = pd.NaT

# 遍历所有日期列,填充对应月份的日期
for col in date_cols:
    # 填充5月日期:只填充May列还为空的行
    sf.loc[(sf[col].dt.month == 5) & sf['May'].isna(), 'May'] = sf[col]
    # 填充6月日期:只填充June列还为空的行
    sf.loc[(sf[col].dt.month == 6) & sf['June'].isna(), 'June'] = sf[col]

场景2:收集每行所有5月/6月日期(用逗号分隔)

如果一行里有多个5月或6月日期,想要全部收集起来,用apply逐行处理:

# 收集所有5月日期,转成字符串用逗号分隔
sf['May'] = sf[date_cols].apply(
    lambda row: ', '.join(row[row.dt.month == 5].dt.strftime('%Y-%m-%d')),
    axis=1
)
# 收集所有6月日期
sf['June'] = sf[date_cols].apply(
    lambda row: ', '.join(row[row.dt.month == 6].dt.strftime('%Y-%m-%d')),
    axis=1
)

# 把空字符串转为空值(可选)
sf['May'] = sf['May'].replace('', pd.NA)
sf['June'] = sf['June'].replace('', pd.NA)

第三步:格式化日期显示(可选)

如果需要把日期显示成特定格式(比如YYYY-MM-DD),可以用dt.strftime:

# 仅当场景1时可用(场景2已经是字符串了)
sf['May'] = sf['May'].dt.strftime('%Y-%m-%d')
sf['June'] = sf['June'].dt.strftime('%Y-%m-%d')

第四步:保存结果

最后把处理好的数据保存成输出文件:

# 保存为csv,要是Excel就用to_excel
sf.to_csv('your_output_file.csv', index=False)

关键改进点

  • 不再局限于单列:遍历所有日期列,一次性处理30多列数据
  • 解决格式错乱:先统一转换为datetime格式,避免因格式不统一导致的筛选错误
  • 灵活适配需求:两种场景覆盖不同的业务需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:50:59