我有一个带有时间戳的温度和风速值的 DataFrame,以及一个将它们转换为“风寒”的函数。我正在使用 iterrows 在每一行上运行该函数,并希望得到一个带有漂亮“Wind Chill”列的 DataFrame。
然而,虽然它似乎可以正常工作,并且实际上至少“工作”过一次,但我似乎无法始终如一地复制它。一般来说,我觉得这是我对 DataFrames 结构的遗漏,但我希望有人能提供帮助。
In [28]: bigdf.head()
Out[28]:
Day Temperature Wind Speed Year
2003-03-01 06:00:00-05:00 1 30.27 5.27 2003
2003-03-01 07:00:00-05:00 1 30.21 4.83 2003
2003-03-01 08:00:00-05:00 1 31.81 6.09 2003
2003-03-01 09:00:00-05:00 1 34.04 6.61 2003
2003-03-01 10:00:00-05:00 1 35.31 6.97 2003
所以我添加了一个“Wind Chill”列bigdf
并预先填充了NaN
.
In [29]: bigdf['Wind Chill'] = NaN
然后我尝试遍历这些行,以添加实际的 Wind Chills。
In [30]: for row_index, row in bigdf[:5].iterrows():
...: row['Wind Chill'] = windchill(row['Temperature'], row['Wind Speed'])
...: print row['Wind Chill']
...:
24.7945889994
25.1365267133
25.934114012
28.2194307516
29.5051046953
正如您所说,新值似乎已应用于“风寒”列。这是windchill
功能,以防万一:
def windchill(temp, wind):
if temp>50 or wind<=3:
return temp
else:
return 35.74 + 0.6215*temp - 35.75*wind**0.16 + 0.4275*temp*wind**0.16
但是,当我再次查看 DataFrame 时,NaN 仍然存在:
In [31]: bigdf.head()
Out[31]:
Day Temperature Wind Speed Year Wind Chill
2003-03-01 06:00:00-05:00 1 30.27 5.27 2003 NaN
2003-03-01 07:00:00-05:00 1 30.21 4.83 2003 NaN
2003-03-01 08:00:00-05:00 1 31.81 6.09 2003 NaN
2003-03-01 09:00:00-05:00 1 34.04 6.61 2003 NaN
2003-03-01 10:00:00-05:00 1 35.31 6.97 2003 NaN
更奇怪的是它已经工作了一两次,我不知道我做了什么不同的事情。
我必须承认我对 pandas 的内部工作不是特别熟悉,并且对索引等感到困惑,所以我觉得我可能在这里遗漏了一些非常基本的东西(或者很难做到这一点)。
谢谢!