python - 如何消除熊猫数据框中的闰年
问题描述
我有 1901-1940 年的每日温度数据。我想排除闰年,即删除任何落在 2/29 的温度数据。我的数据目前是一个长数组。我正在重塑它,以便每年都是一行,每一列都是一天。我正在尝试使用此处的最后一行代码删除闰年:
import requests
from datetime import date
params = {"sid": "PHLthr", "sdate":"1900-12-31", "edate":"2020-12-31", "elems": [{"name": "maxt", "interval": "dly", "duration": "dly", "prec": 6}]}
baseurl = "http://data.rcc-acis.org/StnData"
#get the data
resp = requests.post(baseurl, json=params)
#package into the dataframe
df = pd.DataFrame(columns=['date', 'tmax'], data=resp.json()['data'])
#convert the date column to datetimes
df['date']=pd.to_datetime(df['date'])
#select years
mask = (df['date'] >= '1900-01-01') & (df['date'] <= '1940-12-31')
Baseline=df.loc[mask]
#get rid of leap years:
Baseline=Baseline.loc[(Baseline['date'].dt.day!=29) & (Baseline['date'].dt.month!=2)]
但是当我重塑数组时,我注意到有 366 列而不是 365 列,所以我认为我实际上并没有摆脱 2 月 29 日的数据。我将如何完全消除在整个数据集中记录在 2/29 上的任何温度数据。我每年只想要 365 个数据点。
daily=pd.DataFrame(data={'date':Baseline.date,'tmax':Baseline.tmax})
daily['day']=daily.date.dt.dayofyear
daily['year']=daily.date.dt.year
daily.pivot(index='year', columns='day', values='tmax')
解决方案
简单的方法是在构建数组之前消除这些项目。
import requests
from datetime import date
params = {"sid": "PHLthr", "sdate":"1900-12-31", "edate":"2020-12-31", "elems": [{"name": "maxt", "interval": "dly", "duration": "dly", "prec": 6}]}
baseurl = "http://data.rcc-acis.org/StnData"
#get the data
resp = requests.post(baseurl, json=params)
vals = resp.json()
rows = [row for row in vals['data'] if '02-29' not in row[0]]
print(rows)
推荐阅读
- orm - Sequelize.js 模型关联
- uwsgi - uwsgi 环境变量
- installation - 测试 Inno Setup 安装程序是否以管理员权限运行
- javascript - 如何评估 IE11 中的有效日期字符串
- jquery-select2 - 我是否错误地使用了 select2?接收 JQuery 引用错误
- r - 如何去除时间序列中的特定谐波?
- python - 如何让精灵在撞到墙壁后停止加速?
- ansible - ansible 仅用其字典值替换列表项
- visual-studio-code - 无法连接到 tsserver
- python - Python想要增加一个数组元素,它增加同一列的所有数组元素