我有一个时间戳温度和风速数值的DataFrame,以及一个将它们转换为“风寒”的函数。我使用iterrows在每一行上运行该函数,并希望得到一个具有不错“风寒”列的DataFrame。
然而,虽然它似乎在执行过程中可以工作,并且至少已经“工作”了一次,但我似乎无法始终复制它。我感觉这与DataFrames的结构有关,但我希望有人能帮助解决。
所以我在
更奇怪的是,它曾经有过几次成功的经历,我无法确定自己到底做错了什么。
我必须承认,我对pandas的内部工作机制并不是特别熟悉,而且在索引等方面容易混淆,所以我觉得我可能在这里缺少了非常基本的东西(或者用了更难的方式)。
谢谢!
然而,虽然它似乎在执行过程中可以工作,并且至少已经“工作”了一次,但我似乎无法始终复制它。我感觉这与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
所以我在
bigdf
中添加了一个“风寒”列,并预填了NaN
。In [29]: bigdf['Wind Chill'] = NaN
然后我尝试迭代遍历行,添加实际的风寒效应。
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的内部工作机制并不是特别熟悉,而且在索引等方面容易混淆,所以我觉得我可能在这里缺少了非常基本的东西(或者用了更难的方式)。
谢谢!