Получение IndexError в фрейме данных pandas

Этот код дает мне следующую ошибку в Python 3.6 pandas 23.x

IndexError: only integers, slices (: ), ellipsis ( ... ), numpy.newaxis ( Нет

онлайн

) and integer or boolean arrays are valid indices # получить ту же ошибку с [0]

Я не понимаю почему. Вот весь код, работающий в Jupyter.

from collections import defaultdict
assets = defaultdict(list)
warnings = defaultdict(list)
result = defaultdict(list)
for asset in servers:
    result[asset] = 'Fail'
    # This filters to only the records for this asset
    dfx = df[df['server'] == asset]
    ostype[asset] = dfx.ostype(0) ### Error
    for ntp in dfx.source:
        if ntp in valid_ntp_servers:
            result[asset] = 'Pass'
            assets[asset].append(ntp)
        else:
            warnings[asset].append(ntp)

Я помещаю код в отдельную ячейку Jupyter и получаю именно ожидаемый результат

test = dfx.ostype[0]
print(test)

linux

Дополнительное тестирование

for asset in servers[:5]:
    dfx = df[df['server'] == asset]
    test = dfx.ostype[0]
    print(dfx)
    print(test)

Приводит к следующему исключению

---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-388-010067e6d390> in <module>()
      2 for asset in servers[:5]:
      3     dfx = df[df['server'] == asset]
----> 4     test = dfx.ostype[0]
      5     print(dfx)
      6     print(test)

~\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\series.py in __getitem__(self, key)
    765         key = com._apply_if_callable(key, self)
    766         try:
--> 767             result = self.index.get_value(self, key)
    768 
    769             if not is_scalar(result):

~\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\core\indexes\base.py in get_value(self, series, key)
   3116         try:
   3117             return self._engine.get_value(s, k,
-> 3118                                           tz=getattr(series.dtype, 'tz', None))
   3119         except KeyError as e1:
   3120             if len(self) > 0 and self.inferred_type in ['integer', 'boolean']:

pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_value()

pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_value()

pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas\_libs\hashtable_class_helper.pxi in pandas._libs.hashtable.Int64HashTable.get_item()

pandas\_libs\hashtable_class_helper.pxi in pandas._libs.hashtable.Int64HashTable.get_item()

KeyError: 0

Результат цикла выглядит так:

  ostype        date   server            source
0  linux  2018-08-14  abcde01  east.time.zzzzzz
1  linux  2018-08-14  abcde01       ntp7.zzzzzz
2  linux  2018-08-14  abcde01       ntp9.zzzzzz
3  linux  2018-08-14  abcde01       ntp0.zzzzzz
linux

Использование .iloc [0], как предлагается в комментариях, работает в моем тестовом цикле, но не работает, когда я использую его в своей программе.

IndexError                                Traceback (most recent call last)
<ipython-input-390-fce3c88d6e8e> in <module>()
      6     result[asset] = 'Fail'
      7     dfx = df[df['server'] == asset]
----> 8     ostype[asset] = dfx.ostype.iloc[0]
      9     for ntp in dfx.source:
     10         if ntp in valid_ntp_servers:

IndexError: only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices

Попробуйте использовать [0] вместо (0).

Shaido 28.08.2018 05:37

@Shaido Я почти уверен, что ты только что поймал это :)

T.Woody 28.08.2018 05:37

@Shaido Я тоже пробовал, с той же ошибкой. Я пробовал все варианты (.loc, astype и т. д.), Я знаю, что они должны работать без успеха, и не могу объяснить, почему. Он работает, пока я не помещаю его в цикл, затем я начинаю получать keyerror или indexerror

Harvey 28.08.2018 14:58
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
3
1 009
1

Ответы 1

Ошибка заключалась в том, что на клавиатуре болталась гайка.

Эта линия

ostype[asset] = dfx.ostype.iloc[0]

выдавал различные исключения индексов и ключей, и мы сосредоточились на правой части уравнения. Проблема слева. «ostype» - это также имя поля во фрейме данных, которое было поспешно изменено, когда исходное имя «type» вызвало проблемы.

Углы и дверные проемы ребята. Следите за их углами и дверными проемами. Или, в данном случае, обе стороны уравнения.

Спасибо

Другие вопросы по теме