如何从含dd-mmm-yy格式日期的CSV文件中按季节筛选数据?
解决dd-mmm-yy格式日期转换与季节数据筛选问题
核心步骤说明
先搞定dd-mmm-yy格式日期的解析,再修正原代码的语法错误,最终实现按季节筛选数据。
1. 读取并解析日期列
用pandas读取CSV时,直接指定日期列的解析格式,同时处理两位数年份的世纪推断(避免把53误判为2053):
import pandas as pd # 读取CSV并解析date列为datetime类型 data = pd.read_csv('your_dataset.csv', parse_dates=['date'], date_format='%d-%b-%y') # 确保两位数年份映射到19xx(根据你的数据实际年份范围调整) data['date'] = data['date'].apply(lambda x: x.replace(year=x.year + 1900) if x.year < 100 else x)
2. 两种筛选方式(二选一即可)
方式一:转换为yyyymmdd整数后筛选
生成yyyymmdd格式的整数列,再按原计划筛选(必须给每个比较条件单独加括号,否则会因运算符优先级报错):
# 生成yyyymmdd格式的整数列 data['yyyymmdd'] = data['date'].dt.strftime('%Y%m%d').astype(int) # 筛选1953年春季数据 dataset_Spring_1953 = data.loc[(data['yyyymmdd'] >= 19530301) & (data['yyyymmdd'] < 19530601)] # 筛选1953年夏季数据 dataset_Summer_1953 = data.loc[(data['yyyymmdd'] >= 19530601) & (data['yyyymmdd'] < 19530901)] # 筛选1953年秋季数据 dataset_Autumn_1953 = data.loc[(data['yyyymmdd'] >= 19530901) & (data['yyyymmdd'] < 19531201)] # 筛选1953年冬季数据(跨年度) dataset_Winter_1953 = data.loc[(data['yyyymmdd'] >= 19531201) & (data['yyyymmdd'] < 19540301)]
方式二:直接用datetime对象筛选(更推荐)
不用转换整数,直接用datetime对象做范围比较,逻辑更直观且不易出错:
# 定义各季节的起止日期 spring_start = pd.to_datetime('1953-03-01') spring_end = pd.to_datetime('1953-06-01') summer_start = pd.to_datetime('1953-06-01') summer_end = pd.to_datetime('1953-09-01') autumn_start = pd.to_datetime('1953-09-01') autumn_end = pd.to_datetime('1953-12-01') winter_start = pd.to_datetime('1953-12-01') winter_end = pd.to_datetime('1954-03-01') # 按季节筛选数据 dataset_Spring_1953 = data.loc[(data['date'] >= spring_start) & (data['date'] < spring_end)] dataset_Summer_1953 = data.loc[(data['date'] >= summer_start) & (data['date'] < summer_end)] dataset_Autumn_1953 = data.loc[(data['date'] >= autumn_start) & (data['date'] < autumn_end)] dataset_Winter_1953 = data.loc[(data['date'] >= winter_start) & (data['date'] < winter_end)]
关键注意事项
- 运算符优先级:原代码缺少括号,
&的优先级高于>=/<,必须给每个比较条件单独包裹括号,否则会触发逻辑错误或语法报错。 - 两位数年份处理:
pandas默认对%y格式的解析规则可能因版本/环境有差异,手动指定世纪(如19xx)可避免年份推断错误。
内容的提问来源于stack exchange,提问作者Nenagh2023
相关产品推荐
相关产品推荐

