执行python脚本时的奇怪行为

执行python脚本时的奇怪行为,python,dataframe,pandas,Python,Dataframe,Pandas,我不知道你们中是否有人有过这样的行为,但在调试我的代码后,我注意到我的代码中发生了一件非常奇怪的事情。 基本上,我是在某个索引(“日期”)处用pandas数据帧中包含的值填充numpy数组(“vols”),但如果我尝试在脚本中执行这段代码: for i in range(capEndDates_size): for j in range(strike_size): vols[i,j] = float(df[capEndDates[i]][stri

我不知道你们中是否有人有过这样的行为,但在调试我的代码后,我注意到我的代码中发生了一件非常奇怪的事情。 基本上,我是在某个索引(“日期”)处用pandas数据帧中包含的值填充numpy数组(“vols”),但如果我尝试在脚本中执行这段代码:

   for i in range(capEndDates_size):
      for j in range(strike_size):         
       vols[i,j] = float(df[capEndDates[i]][strikes_list[j]].ix[date])
我无法用索引“date”处的数据框中包含的值正确填充变量“vols”的所有值,而是在期望值的地方得到一些“nan”。 有趣的是,如果我在解释器中执行这段代码,这是正确的方式(即在Spyder的编辑器上按f9键,这是我正在使用的IDE)!我通过两次重复这些行(即强制脚本执行两次行)找到了解决此错误的方法。 我的解决方案如下:

   for i in range(capEndDates_size):
      for j in range(strike_size):         
       vols[i,j] = float(df[capEndDates[i]][strikes_list[j]].ix[date])

   for i in range(capEndDates_size):
      for j in range(strike_size):         
       vols[i,j] = float(df[capEndDates[i]][strikes_list[j]].ix[date])
这实在令人难以接受。
有人知道为什么会发生这种情况吗?

如果
vols[i,j],为什么不尝试在分配到
vols之后插入一个硬断点(
import pdb;pdb.set_trace()
是否为NaN并以这种方式进行调试?

NaN通常代表的不是一个数字,如果它期望一个数字,但得到一个数组或其他nun数字类型,则会出现这种情况。谢谢ajon,但事实上,数据帧不包含NaN,事实上,如果我执行代码两次,变量将填充正确的值,然而,如果代码只在得到NaN后执行…你能给出一个完整的例子来说明行为,这样我们就可以尝试了吗?哎哟。。。。这有点难,因为它是一个更复杂项目的一部分,涉及我创建的更多模块和一个从以前的脚本中提取并加载到这个脚本中的数据帧。。。。我可能会尝试将该行为复制为更简单代码的一部分,希望我能做到!您能演示一下如何创建数据框吗?顺便说一句,您可以使用
来代替重写代码。范围(2):
。hello Wes,这就是我发现vols变量不会被值填充的原因,但我不明白为什么即使在调试过程中也会发生这种情况