【问题标题】:for loop going over the index len?for循环遍历索引len?
【发布时间】:2019-12-15 01:43:02
【问题描述】:

我必须遍历我的数据框维度的 len,我收到一条错误消息:ValueError: **153353** is not in range。 如您所见,我的止损范围为 153352-1。即使我将其设置为 153351,我也得到了耻辱错误。尽管出现错误,但我的 namefiledict 已被填满。错误出现在最后一行(已填充)

#
namefile = []
for docs in list(df[0][0][0]):
    for allwav in docs:
        for onewavfile in allwav:
            namefile.append(onewavfile)


namefiledict = {}
for i in range(0, 153351,1):
    for name in namefile:
        namefiledict[name] = list(df[i][0])

我也试过for idx, name in enumerate(df):,但这也会导致同样的错误。

[更新] -------------------------------------------------- ------------------------- ValueError Traceback(最近一次调用最后一次) ~/anaconda3/envs/rpython/lib/python3.7/site-packages/pandas/core/indexes/range.py in get_loc(self,key,method,tolerance) 375尝试: --> 376 返回 self._range.index(new_key) 377 除了ValueError:

ValueError: 153353 is not in range

During handling of the above exception, another exception occurred:

KeyError                                  Traceback (most recent call last)
<ipython-input-13-30d2f7a02ddf> in <module>
      4 for i in range(0, 153351,1):
      5     for name in namefile:
----> 6         namefiledict[name] = list(df[i][0])
      7         i+=1

~/anaconda3/envs/rpython/lib/python3.7/site-packages/pandas/core/frame.py in __getitem__(self, key)
   2993             if self.columns.nlevels > 1:
   2994                 return self._getitem_multilevel(key)
-> 2995             indexer = self.columns.get_loc(key)
   2996             if is_integer(indexer):
   2997                 indexer = [indexer]

~/anaconda3/envs/rpython/lib/python3.7/site-packages/pandas/core/indexes/range.py in get_loc(self, key, method, tolerance)
    376                 return self._range.index(new_key)
    377             except ValueError:
--> 378                 raise KeyError(key)
    379         return super().get_loc(key, method=method, tolerance=tolerance)
    380 

KeyError: 153353

【问题讨论】:

  • 循环数据帧的最简单方法是使用df.itertuples(),尽管通常有更好的方法。你到底想完成什么?
  • 我想遍历这个 df 并将数组放入其中一个列,然后将其添加到 dict。但是为什么会出现这个错误呢?
  • 发布完整的错误消息,包括堆栈跟踪。你应该一直这样做。
  • 您收到一个键错误,因为该索引不在数据框中。你为什么要增加i?看看下面的答案
  • 正如 juanpa.arrivillaga 所说,显式循环应该是最后的手段。你能分享更多你的代码和数据,并解释你的程序是做什么的吗?

标签: python for-loop indexing


【解决方案1】:

代码的最后一行将i 加一。这就是循环结束的原因,因为i 已经被for-loop 逻辑递增。您需要删除此行。

当使用这种形式的 for 语句时,让 python 处理递增。

【讨论】:

  • 当我删除它时我注意到它花了我太长时间,就像看起来永远不会结束一样。这就是我添加它的原因。可能是复杂性。 namefile 是一个列表,有 153353 个元素。
  • @abdoulsn 这可能需要很长时间,因为它不是惯用的 Pandas。你读过文档吗?
  • 你在惯用的 Pandas 中是什么意思?
  • 它的工作我删除了那个。但这需要很长时间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-17
  • 1970-01-01
  • 1970-01-01
  • 2016-03-03
  • 1970-01-01
  • 2022-06-30
相关资源
最近更新 更多