Pandas: "столбец" не в индексе, но, черт возьми, он есть. Похоже на ошибку ...

Созданный на 18 авг. 2017  ·  24Комментарии  ·  Источник: pandas-dev/pandas

У меня есть фрейм данных, называемый доставкой, и когда я печатаю (delivery.columns), я получаю следующее:

Index(['Complemento_endereço', 'cnpj', 'Data_fundação', 'Número',
   'Razão_social', 'CEP', 'situacao_cadastral', 'situacao_especial', 'Rua',
   'Nome_Fantasia', 'last_revenue_normalized', 'last_revenue_year',
   'Telefone', 'email', 'Capital_Social', 'Cidade', 'Estado',
   'Razão_social', 'name_bairro', 'Natureza_Jurídica', 'CNAE', '#CNAE',
   'CNAEs_secundários', 'Pessoas', 'percent'],
  dtype='object')

Что ж, хорошо видно, что есть столбец «Руа».

Кроме того, если я напечатаю (delivery.Rua), то получу правильный результат:

82671                         R JUDITE MELO DOS SANTOS
817797                                R DOS GUAJAJARAS
180081           AV MARCOS PENTEADO DE ULHOA RODRIGUES
149373                                 AL MARIA TEREZA
455511                               AV RANGEL PESTANA
...

Даже если я напишу «if 'Rua' в delivery.columns: print ('here I am')», он напечатает «here I am». Итак, «Руа» действительно существует.

Что ж, в строке сразу после этого кода:

delivery=delivery.set_index('cnpj')[['Razão_social','Nome_Fantasia','Data_fundação','CEP','Estado','Cidade','Bairro','Rua','Número','Complemento_endereço','Telefone','email','Capital_Social', 'CNAE', '#CNAE', 'Natureza_Jurídica','Pessoas' ]]

И вуаля, я получаю эту странную ошибку:

Traceback (most recent call last):
File "/file.py", line 45, in <module>
   'Telefone', 'email', 'Capital_Social', 'Cidade', 'Estado',
   'Razão_social', 'name_bairro', 'Natureza_Jurídica', 'CNAE', '#CNAE',
'Telefone','email','Capital_Social', 'CNAE', '#CNAE', 'Natureza_Jurídica','Pessoas' ]]
   'CNAEs_secundários', 'Pessoas', 'percent'],
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/pandas/core/frame.py", line 1991, in __getitem__
  dtype='object')
return self._getitem_array(key)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/pandas/core/frame.py", line 2035, in _getitem_array
indexer = self.ix._convert_to_indexer(key, axis=1)
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/pandas/core/indexing.py", line 1214, in _convert_to_indexer
raise KeyError('%s not in index' % objarr[mask])
KeyError: "['Rua'] not in index"

Кто-нибудь может помочь? Я пробовал stackoverflow, но никто не мог помочь. Я начинаю думать, что я сумасшедший, а «Руа» - это иллюзия моего беспокойного ума.

ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ

Я использую этот код прямо перед строкой ошибки:

delivery=pd.DataFrame()

for i in selection.index:
    sample=groups.get_group(selection['#CNAE'].loc[i]).sample(selection['samples'].loc[i])
    delivery=pd.concat((delivery,sample)).sort_values('Capital_Social',ascending=False)


print(delivery.columns)
print(delivery.Rua)
print(delivery.set_index('cnpj').columns)

delivery=delivery.set_index('cnpj')[['Razão_social','Nome_Fantasia','Data_fundação','CEP','Estado','Cidade','Bairro','Rua','Número','Complemento_endereço',
                                 'Telefone','email','Capital_Social', 'CNAE', '#CNAE', 'Natureza_Jurídica','Pessoas' ]]

РЕДАКТИРОВАТЬ

Новые странности:
Я отказался и удалил Rua из этого последнего фрагмента кода, желая, чтобы он работал. К моему удивлению, у меня была та же проблема, но теперь с колонкой «Número».

delivery=delivery.set_index('cnpj')[['Razão_social','Nome_Fantasia','Data_fundação','CEP','Estado','Cidade','Bairro','Número','Complemento_endereço',
                                                 'Telefone','email','Capital_Social', 'CNAE', '#CNAE', 'Natureza_Jurídica' ]]

KeyError: "['Número'] not in index"

РЕДАКТИРОВАТЬ 2

А потом я отказался от «Número» и отказался от него. Затем такая же проблема произошла с «Complemento_endereço». Затем я удалил "Complemento_endereço". И это случилось с «телефоном» и так далее.

* РЕДАКТИРОВАТЬ 3 *

Если я сделаю pd.show_versions (), результат будет:

УСТАНОВЛЕННЫЕ ВЕРСИИ

фиксация: Нет
питон: 3.5.0.final.0
Python-биты: 64
ОС: Дарвин
Релиз ОС: 16.5.0
машина: x86_64
процессор: i386
byteorder: маленький
LC_ALL: Нет
ЯЗЫК: Нет

панды: 0.18.1
нос: нет
пункт: 8.1.2
setuptools: 18.2
Cython: Нет
число: 1.11.0
scipy: 0.17.1
statsmodels: 0.6.1
xarray: Нет
IPython: нет
сфинкс: нет
Пэтси: 0.4.1
dateutil: 2.5.3
pytz: 2016.4
blosc: Нет
узкое место: нет
таблицы: нет
numexpr: нет
matplotlib: 1.5.1
openpyxl: Нет
xlrd: 1.0.0
xlwt: Нет
xlsxwriter: Нет
lxml: Нет
BS4: 4.5.1
html5lib: Нет
httplib2: Нет
apiclient: Нет
sqlalchemy: 1.1.3
pymysql: 0.7.11.Нет
psycopg2: Нет
jinja2: Нет
boto: Нет
pandas_datareader: Нет
Никто

Indexing

Самый полезный комментарий

Это для тех, кто попал сюда после поиска в Google, чтобы увидеть, что не так.

Если вы работаете с CSV или XLSX, убедитесь на 100%, что ни в одном из имен ваших столбцов нет пробелов в начале или в конце.

При импорте CSV я заметил, что возникла проблема с получением столбца. При экспорте df в csv и открытии его в Excel невозможно увидеть конечные или ведущие пробелы. Вы должны открыть его с помощью блокнота или блокнота ++

Опять же, это для тех, кто попал сюда через поиск в Google. Убедитесь, что все начальные и конечные пробелы удалены из имен заголовков столбцов в вашем csv, xlsx или любом другом шаблоне файла фрейма данных, который вы можете использовать.

Все 24 Комментарий

@abutremutante : Спасибо, что сообщили об этом! Это действительно выглядит странно, но мы не можем воспроизвести это сейчас, потому что мы не можем запустить ваш код. Не могли бы вы предоставить нам полный образец кода?

Кроме того, если бы вы могли предоставить вывод pd.show_versons в поле начальной проблемы, это было бы здорово.

Всем привет! Спасибо за ответы.
Я бы не хотел публиковать его на github. Могу я отправить его вам по электронной почте?

Em 17 de ago de 2017, à (s) 19:38, gfyoung [email protected] escreveu:

@abutremutante https://github.com/abutremutante : Спасибо, что сообщили об этом! Это действительно выглядит странно, но мы не можем воспроизвести это сейчас, потому что мы не можем запустить ваш код. Не могли бы вы предоставить нам полный образец кода?

Кроме того, было бы замечательно, если бы вы могли предоставить вывод pd.show_versons в поле начальной проблемы.

-
Вы получаете это, потому что вас упомянули.
Ответьте на это письмо напрямую, просмотрите его на GitHub https://github.com/pandas-dev/pandas/issues/17275#issuecomment-323213193 или отключите поток https://github.com/notifications/unsubscribe-auth/ ARNqx54xVjjuQyYofj1-AEjp9NRL5AFnks5sZMD7gaJpZM4O63lz .

Желательно нет, так как любой, кто хочет заняться этой проблемой, должен будет увидеть код. Можете ли вы попробовать выполнить репликацию с другой таблицей (или DataFrame ), которая не содержит конфиденциальной информации?

Пробовал здесь:

импортировать панд как pd
import FindCos.FindCos_Functions как find # это файл, в котором я пишу некоторые функции
дата и время импорта
импорт pdb

target = find.get_full_basics (business = 'выбрать * из sqltable;', test_mode = False)

CNAEs = ['23.30-3-01', '26', '27', '49.30-2-03', '37.02-9-00', '46.45', '47.73', '46.44-3-01' ]
hired_cos = 200

выбор элементов из CNAE

выбор = pd.DataFrame ()
для i в CNAE:
x = target.loc [цель ['# CNAE']. str.startswith (i) == True]
selection = pd.concat ((выделение, x))

ФИЛЬТРАЦИЯ

selection = selection.loc [selection ['Capital_Social'] <100000000] .loc [selection ['situacao_cadastral'] == 'ATIVA'] \
.loc [selection ['situacao_especial']. isnull () == True] .loc [selection ['Natureza_Juridica']! = 'EMPRESA INDIVIDUAL DE RESP.LIMITADA (DE NATUREZA EMPRESARIA)'] \
.loc [selection ['Natureza_Juridica']! = 'EMPRESARIO (INDIVIDUAL)'] \
.loc [selection ['Estado']! = 'PA']. loc [selection ['Estado']! = 'AM'] \
.loc [selection ['Estado']! = 'RR']. loc [selection ['Estado']! = 'AC']. loc [selection ['Estado']! = 'RO']. loc [selection [ 'Estado']! = 'AP'] \
.loc [выбор ['Estado']! = 'TO']

КОНТРОЛЬ ДУБЛИКАЦИИ

lista = ['file.csv']
selection = find.exclude_business (выбор, список)

ПРОВЕРКА ПРОФИЛЯ

группы = selection.groupby ('# CNAE')
выделение ['процент'] = группы ['# CNAE']. преобразование ('размер') / len (выделение)
selection = selection [['# CNAE', 'percent']]. drop_duplicates (). sort_values ​​('percent', ascending = False)
выбор ['образцы'] = раунд (((hired_cos 1.05) выбор ['процент']))

delivery = pd.DataFrame ()
для i в selection.index:
sample = groups.get_group (selection ['# CNAE']. loc [i]). sample (selection ['samples']. loc [i])
delivery = pd.concat ((delivery, sample)). sort_values ​​('Capital_Social', ascending = False) #. rename (columns = {'Capital_Social': 'Score_Tamanho'})

УБЕДИТЕСЬ, ЧТО RUA ДЕЙСТВИТЕЛЬНО СУЩЕСТВУЕТ

печать (delivery.columns)
печать (delivery.Rua)
печать (delivery.set_index ('cnpj'). columns)
delivery = delivery.rename (columns = {'Rua': 'Rua'})
если в столбцах delivery.columns есть «Rua»:
print ('вот я')

ПРОБЛЕМА СТРОКА

delivery = delivery.set_index ('cnpj') [['cnpj', 'Razao_social', 'Nome_Fantasia', 'Data_fundacao', 'CEP', 'Estado', 'Cidade', 'Bairro', 'Rua', 'Numero ',' Complemento_endereco ',' Telefone ',' email ',' Capital_Social ',' CNAE ',' # CNAE ',' Natureza_Juridica ']]

@abutremutante : Спасибо, но, к сожалению, этот код не может быть воспроизведен для нас. Мы не можем запустить import FindCos.FindCos_Functions . Попробуйте просто создать DataFrame с нуля и воспроизвести проблему.

Кроме того, было бы замечательно, если бы вы могли предоставить вывод pd.show_versons в поле начальной проблемы.

@gfyoung : я добавил в поле начальной проблемы pd.show_versions.
Что касается фрейма данных, это довольно длинный фрейм данных. Я сделал csv, используя первые 10 строк, прямо здесь:

target = find.get_full_basics (business = 'select * from sqltable limit 10;', test_mode = False)
target.to_csv ('target10items.csv')

Прикрепляю сюда.
target10items.csv.zip

1) Можете ли вы воспроизвести свою проблему с помощью этого меньшего DataFrame ?
2) Я заметил, что вы используете очень старую версию pandas (сейчас мы находимся на 0.20.3 ). Можете ли вы попробовать выполнить обновление и посмотреть, решит ли это вашу проблему?

«Bairro» отсутствует в вашем выводе для print(delivery.columns) но присутствует в списке, который вы предоставляете после set_index . Немного подозрительно, что в этом списке «Байрро» стоит непосредственно перед «Руа». Может быть, в сообщении об ошибке есть проблема с выбором отсутствующего столбца?

Хорошо, я думаю, проблема в том, что «Bairro» на самом деле является отсутствующим ключом, но в pandas 0.18.1 была ошибка, из-за которой в сообщении об ошибке отображается неправильный элемент в качестве отсутствующего ключа.

Используя следующий код

import pandas as pd
import numpy as np

cols = pd.Index(['Complemento_endereço', 'cnpj', 'Data_fundação', 'Número',
   'Razão_social', 'CEP', 'situacao_cadastral', 'situacao_especial', 'Rua',
   'Nome_Fantasia', 'last_revenue_normalized', 'last_revenue_year',
   'Telefone', 'email', 'Capital_Social', 'Cidade', 'Estado',
   'Razão_social', 'name_bairro', 'Natureza_Jurídica', 'CNAE', '#CNAE',
   'CNAEs_secundários', 'Pessoas', 'percent'],
  dtype='object')
delivery = pd.DataFrame(np.random.random(size=(5, len(cols))), columns=cols)

delivery = delivery.set_index('cnpj')[['Razão_social','Nome_Fantasia','Data_fundação','CEP','Estado','Cidade','Bairro','Rua','Número','Complemento_endereço','Telefone','email','Capital_Social', 'CNAE', '#CNAE', 'Natureza_Jurídica','Pessoas' ]]

На pandas 0.18.1 я получаю следующую ошибку:

KeyError: "['Rua'] not in index"

Однако на pandas 0.20.3 я получаю исправленную ошибку:

KeyError: "['Bairro'] not in index"

Ты
Прибитый
Это
@jschendel

Большое спасибо @gfyoung

Большое спасибо.

Закрытие, так как кажется, что ваша проблема решена.

Привет
Я не вижу реальной идеи решить проблему, @gfyoung Почему вы закрываете это? У меня все еще есть эта проблема. НЕТ жалоб, просто так надоела эта ошибка.

@ wangxuesong29 у вас есть минимальный пример? http://matthewrocklin.com/blog/work/2018/02/28/minimal-bug-reports

У меня такая же проблема, как и у вас. Я заметил, что если я изменяю данные в формате .csv в программе OpenOffice, возникает ошибка. Вместо этого я скачал данные из Интернета и отредактировал их в простом редакторе Notepad ++. Потом нормально работает. Я знаю, что, возможно, это решение вам не поможет, но, возможно, вам следует изменить текстовый редактор или программу, поддерживающую файлы .csv.

ОШИБКА :
панды версия 0.23.4
У вас та же проблема, оставив тот же код, что и выше,

После запуска кода я получаю:

"Окрестности" нет в индексе

КОД :
`импортировать панды как pd
импортировать numpy как np

cols = pd.Index (['Address_Complement', 'cnpj', 'Foundation_Date', 'Number',
'Corporate_reason', 'CEP', 'situacao_cadastral', 'situacao_especial', 'Улица',
'Fantasy_Name', 'last_revenue_normalized', 'last_revenue_year',
"Телефон", "электронная почта", "Capital_Social", "Город", "Штат",
'Corporate_reason', 'name_neighborhood', 'Nature_Legal', 'CNAE', '#CNAE',
'Secondary_CNAEs', 'Люди', 'проценты'],
dtype = 'объект')
delivery = pd.DataFrame (np.random.random (размер = (5, len (cols))), columns = cols)

delivery = delivery.set_index ('cnpj') [['Company_Name', 'Fantasy_Name', 'Foundation_Date', 'Почтовый индекс', 'State', 'City', 'Neighborhood', 'Street', 'Number', ' Address_Complement ',' Phone ',' email ',' Social_Capital ',' CNAE ',' #CNAE ',' Legal_Nature ',' People ']]
`

Это для тех, кто попал сюда после поиска в Google, чтобы увидеть, что не так.

Если вы работаете с CSV или XLSX, убедитесь на 100%, что ни в одном из имен ваших столбцов нет пробелов в начале или в конце.

При импорте CSV я заметил, что возникла проблема с получением столбца. При экспорте df в csv и открытии его в Excel невозможно увидеть конечные или ведущие пробелы. Вы должны открыть его с помощью блокнота или блокнота ++

Опять же, это для тех, кто попал сюда через поиск в Google. Убедитесь, что все начальные и конечные пробелы удалены из имен заголовков столбцов в вашем csv, xlsx или любом другом шаблоне файла фрейма данных, который вы можете использовать.

У меня тоже такая ошибка.
Столбцы называются правильно, но когда я использую seaborn с моим файлом CSV, я получаю сообщение об ошибке (мой столбец является нашим индексом)

import seaborn as sns
import pandas as pd
Data = pd.read_csv('test.csv',delimiter=',') 
sns.lmplot(x='predLabel', y='trueLabel', data=Data)

сообщение об ошибке:
KeyError: «['predLabel' 'trueLabel'] не в индексе»

У меня такая же проблема
Столбцы названы правильно, но когда я использую seaborn с моим файлом CSV, я получаю сообщение об ошибке (мой столбец не в индексе)

импортировать seaborn как sns
импортировать панд как pd
df =
pd.read_csv ('lawma1.csv', index_col = [0, 1], delimiter = ',')
sns.lmplot (x = 'НЕДЕЛЯ1', y = 'ФЛОТ', data = df) .savefig ('law.png')

сообщение об ошибке:
KeyError: "['FLEET'] не в индексе

У меня была эта ошибка, потому что у меня была точка "." в конце имени столбца, он работал после того, как я его удалил.
podaci = pd.read_csv('data/fifa19a.csv', names=['id', 'ime', 'godine', 'ocjena', 'potencijal.', 'bodovi', 'stopalo', 'placa_tis_eur', 'cijena_mil_eur'])
Так было в столбце "потенциал"
Это может быть ошибка

Я столкнулся с той же проблемой, я даже использовал печать (X.columns), и он показал индекс 'exc_end', но когда я использовал его в centroids_new = X.groupby (["кластеры"]). mean () [[" Exposition_end "," Duration "]] ошибка" Exposition_end "отсутствует в index.please help, я застрял здесь последние два часа.

я нашел решение своей проблемы.
я использовал вышеупомянутый оператор, что centroids_new = X.groupby (["кластеры"]). mean () [["Exposition_end", "Duration"]] я использовал x.mean (axis = 1) над этим оператором, а затем использовал заявление
centroids_new = X.groupby (["кластеры"]). mean () [["Exposition_end", "Duration"]] без среднего значения, и он работал нормально. Раньше не мог использовать ось в операторе, потому что он не работал с groupby, поэтому пришлось сделать это в два этапа.
и основная проблема, почему это происходило, заключалась в том, что ось не была установлена ​​на 1.

Нашел решение проблемы, у меня работает отлично.

Проверьте, разделен ли ваш CSV-файл символами ',' или '; '. В моем случае мои данные были разделены ',' но я использовал '; '.

Так просто добавил

Df = pd.read_csv ('C: \ Users \ user \ Desktop \ data.csv', sep = ",")

«столбец» и «столбец»

это две разные вещи, у первой есть пространство впереди. ТАК ПРОСТО ДОБАВЬТЕ ПРОСТРАНСТВО, ГДЕ ПРОСТРАНСТВО

Например:
df ["столбец"] работал у меня

Была ли эта страница полезной?
0 / 5 - 0 рейтинги