Python 我是否在熊猫df.tail()中发现了bug或犯了错误?
好的,我有一个奇怪的。我可能发现了一个bug,但我们先假设我犯了一个错误。不管怎样,我遇到了一些关于熊猫的问题 我想找到数据帧的最后两列,以比较列Python 我是否在熊猫df.tail()中发现了bug或犯了错误?,python,python-3.x,pandas,Python,Python 3.x,Pandas,好的,我有一个奇怪的。我可能发现了一个bug,但我们先假设我犯了一个错误。不管怎样,我遇到了一些关于熊猫的问题 我想找到数据帧的最后两列,以比较列'Col'的值。我在for循环中运行代码,因为它需要在文件夹中的所有文件上运行。此代码: import pandas for item in itemList: df = df[['Col']].tail(2) valA = df.iloc[1]['Col'] valB = df.iloc[0]['Col'] 主要是工作。我
'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
我看到一个37行的数据框。在我的世界里,37>2
现在,让我们将打印(df)
向下移动一行,如下所示:
df = df[['Col']].tail(2)
print(df)
输出通常是预期的两行。但是,在出现错误时,df.tail(2)
返回37行数据帧中的一行数据帧。不是两排,是一排。然而,这只发生在循环中的一个项目上。其他的都很好。如果我像这样手动跳过该项目:
for item in itemList:
if item == 'troublemaker':
continue
。。。剧本从头到尾都是。没有错误发生
我必须补充一点,我对这一切都很陌生,所以我可能会完全忽略一些事情。是吗?欢迎提出建议。谢谢
编辑:这是出现错误时打印(df)的输出
Col
Date
2018-11-30 True
在所有其他情况下:
Col
Date
2018-10-31 False
2018-11-30 True
我不认为这是一个bug,因为它在2000年只发生在一个df上。你能给我看看吗? 我也不认为你需要尾巴,你试过了吗
valA = df.iloc[-2]['Col']
valB = df.iloc[-1]['Col']
要获取最后的值。因为它没有第二个索引,这就是返回错误的原因,请尝试使用
tail
和head
,请注意,对于示例df,valA
和valB
将是相同的值
import pandas
for item in itemList:
df = df[['Col']].tail(2)
valA = df.tail(1)['Col']
valB = df.head(1)['Col']
你想在这里给我们看df.tail(2)吗?W-B,你是说它的输出吗?我是说给我们看打印(df.tail(2)),输出是什么当然,W-B,完成了。添加一个方法谢谢,你让我走上正轨了。这个错误是脚本中其他地方的一个bug,它导致数据帧只有一行,但仅在本例中。非常感谢。谢谢,那很有帮助。我试过你的方法,你是对的,没有必要用tail()。
import pandas
for item in itemList:
df = df[['Col']].tail(2)
valA = df.tail(1)['Col']
valB = df.head(1)['Col']