Хорошо, у меня есть странный.Возможно, я нашел ошибку, но давайте предположим, что сначала я допустил ошибку.В любом случае, у меня возникают некоторые проблемы с пандами.
Я хочу найти два последних столбца информационного кадра, чтобы сравнить значения столбца 'Col'
.Я запускаю код внутри цикла for, потому что он должен выполняться для всех файлов в папке.Этот код:
import pandas
for item in itemList:
df = df[['Col']].tail(2)
valA = df.iloc[1]['Col']
valB = df.iloc[0]['Col']
Работает в основном.Я запустил 1040 фреймов данных без проблем.Затем в 1041 из 2000 это вызывает эту ошибку:
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)
выясним это.Если я print(df)
до присвоения .tail(2)
, как это:
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