Pandas DataFrame如何判断日期是否为6月并新增yes/no标注列
Pandas DataFrame按日期列月份生成标识列解决方案
前置操作
假设你的日期列名称为date,首先需确保该列已转换为Pandas datetime格式,若仍为字符串格式可执行以下代码转换:
df['date'] = pd.to_datetime(df['date'])
如果读入数据时就需要解析日期,也可以在读入阶段直接指定,省掉单独转换的步骤:
df = pd.read_csv('你的文件路径.csv', parse_dates=['date'])
核心实现代码
通过Pandas日期内置的dt.month属性判断月份是否为6,直接生成新列is_june:
df['is_june'] = df['date'].dt.month.eq(6).map({True: 'yes', False: 'no'})
你也可以用numpy.where实现相同逻辑,写法更直观:
import numpy as np df['is_june'] = np.where(df['date'].dt.month == 6, 'yes', 'no')
测试验证
你可以用以下测试代码验证逻辑正确性:
import pandas as pd # 构造测试数据 df = pd.DataFrame({ 'date': ['2019-05-30', '2019-06-01', '2019-07-15', '2020-06-20'] }) # 转换日期格式 df['date'] = pd.to_datetime(df['date']) # 生成新列 df['is_june'] = df['date'].dt.month.eq(6).map({True: 'yes', False: 'no'}) print(df)
输出结果如下:
date is_june 0 2019-05-30 no 1 2019-06-01 yes 2 2019-07-15 no 3 2020-06-20 yes
注意事项
- 优先使用上述向量化运算方案,不要用逐行
apply的写法,处理十万行以上级别的数据时性能差距可达几十倍 - 如果你的日期列存在空值,生成的新列对应位置会默认返回
no,如果需要单独标记空值可以额外加判断逻辑
内容的提问来源于stack exchange,提问作者rondevo
相关产品推荐
相关产品推荐

