【发布时间】:2021-03-09 12:36:30
【问题描述】:
我有这个任务,我不想为我解决它,我只想使用最 PYTHONIC 的方式来解决它“那么在存在矢量化等技术的情况下,通过执行 100 个 for 循环进行编程的意义是什么” , 此外,我一直卡在某个点上,我不知道为什么它对我不起作用。
任务 我的数据集是国家环境信息中心的一个子集,它是来自数千个陆地站的每日气候记录。数据如下我应该清理数据并根据一年中 365 天的每一天绘制温度。
df
ID Date Element Data_Value
0 USW00094889 2014-11-12 TMAX 2.2
1 USC00208972 2009-04-29 TMIN 5.6
2 USC00200032 2008-05-26 TMAX 27.8
3 USC00205563 2005-11-11 TMAX 13.9
4 USC00200230 2014-02-27 TMAX -10.6
5 USW00014833 2010-10-01 TMAX 19.4
6 USC00207308 2010-06-29 TMIN 14.4
7 USC00203712 2005-10-04 TMAX 28.9
8 USW00004848 2007-12-14 TMIN -1.6
9 USC00200220 2011-04-21 TMAX 7.2
df.shape
(165085, 4)
我的策略 1- 将 DF 分成两 (2) 个 DF,一个用于 Element='TMAX',另一个用于 Element='TMIN',因为当时我没有找到按“日期”和“元素”分组的方法使用一个矢量化命令将每个结果放在单独的列中。
2- 按“Data_Value”上的“日期”聚合,MAX 代表 DFMAX,MIN 代表 DFMIN。
3- 使用外部和索引合并两个 DF = True
4- 删除闰日
5- 添加“Day_of_Year”列,该列将保存一年中的日期。在这里我卡住了,因为闰年有 366 天,这意味着正常年份的 3 月 1 日的 Day_of_Year = 60,而闰年的同一天 3 月 1 日的 Day_of_Year = 61。 因此,最终的绘图将不正确,因为闰年有一天的换日。
我尝试应用 lambda 函数来更改此特定闰年的值,但它会引发错误。代码和错误如下。
df['2008']['Day_of_Year'] = df['2008']['Day_of_Year'].apply(lambda x: x for x in range(1, 366))
此时,df.index 是 dateobject,因此使用了 df['2008']。
错误
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-47-f60e8731fc55> in <module>()
4 #
5
----> 6 df['2008']['Day_of_Year'] = df['2008']['Day_of_Year'].apply(lambda x: x for x in range(1, 366))
/opt/conda/lib/python3.6/site-packages/pandas/core/series.py in apply(self, func, convert_dtype, args, **kwds)
2292 else:
2293 values = self.asobject
-> 2294 mapped = lib.map_infer(values, f, convert=convert_dtype)
2295
2296 if len(mapped) and isinstance(mapped[0], Series):
pandas/src/inference.pyx in pandas.lib.map_infer (pandas/lib.c:66124)()
TypeError: 'generator' object is not callable
提前欣赏。
【问题讨论】: