python - 我是否在 pandas df.tail() 中发现了错误或犯了错误?

标签 python python-3.x pandas

好吧,我有一个奇怪的。我可能发现了一个错误,但我们假设我首先犯了一个错误。不管怎样,我在使用 pandas 时遇到了一些问题。

我想找到数据帧的最后两列来比较列'Col' 的值。我在 for 循环内运行代码,因为它需要在文件夹中的所有文件上运行。这段代码:

import pandas

for item in itemList:
    df = df[['Col']].tail(2)
    valA = df.iloc[1]['Col']
    valB = df.iloc[0]['Col']

大部分工作。我运行了超过 1040 个数据帧,没有出现任何问题。然后在大约 2000 的 1041 处,它会导致此错误:

Traceback (most recent call last):
  File "/path/to/script.py", line 206, in <module>
    valA = df.iloc[1]['Col']
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pandas/core/indexing.py", line 1373, in __getitem__
return self._getitem_axis(maybe_callable, axis=axis)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pandas/core/indexing.py", line 1830, in _getitem_axis
    self._is_valid_integer(key, axis)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/pandas/core/indexing.py", line 1713, in _is_valid_integer
    raise IndexError("single positional indexer is out-of-bounds")
IndexError: single positional indexer is out-of-bounds

由此我想,数据帧可能太短了。不应该的,我在其他地方对此进行了测试,但是好的,错误发生了,所以让我们 print(df) 来解决这个问题。 如果我在分配.tail(2)之前print(df),如下所示:

print(df)
df = df[['Col']].tail(2)
valA = df.iloc[1]['Col']
valB = df.iloc[0]['Col']

我看到一个 37 行的数据框。在我的世界里,37 > 2。

现在,让我们将 print(df) 向下移动一行,如下所示:

df = df[['Col']].tail(2)
print(df)

正如人们所期望的,输出通常是两行。但是,出现错误时,df.tail(2) 从 37 行数据帧中返回一行数据帧。不是两排,是一排。然而,这只发生在循环中的一项上。其他人都工作正常。如果我像这样手动跳过该项目:

for item in itemList:
    if item == 'troublemaker':
        continue

...脚本一直运行到最后。没有发生错误。

我必须补充一点,我对这一切还很陌生,所以我可能完全忽略了一些东西。我是吗?建议表示赞赏。谢谢。

编辑:这是发生错误时 print(df) 的输出

                Col       
Date                  
2018-11-30        True

在所有其他情况下:

                Col       
Date
2018-10-31       False
2018-11-30        True

最佳答案

由于它没有第二个索引,这就是返回错误的原因,请尝试使用 tailhead ,请注意这一点,对于您的示例 df,valAvalB 将是相同的值

import pandas

for item in itemList:
    df = df[['Col']].tail(2)
    valA = df.tail(1)['Col']
    valB = df.head(1)['Col']

关于python - 我是否在 pandas df.tail() 中发现了错误或犯了错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53511429/

相关文章:

python - CreateView使用参数

python - Pandas 倒计时功能的反向累积?

python - 带有 pabot : is it possible to pass two different values to a variable in two tests 的机器人框架

python - Ubuntu 上的 Azure CLI 权限被拒绝错误

python - PyDev Eclipse Python 解释器错误 : stdlib not found

python-3.x - Pandas 相当于 R 的 cbind(垂直连接/堆栈向量)

python - 合并两个 pandas 数据帧两个,使用特定操作创建一个新数据帧

Python 3 and-or vs if-else

python - 如何在 SQL 和 Pandas 中获得相同的percent_rank?

python - 将列插入 Pandas 数据框