Pandas: 'columna' no está en el índice, pero sí. Parece un error ...

Creado en 18 ago. 2017  ·  24Comentarios  ·  Fuente: pandas-dev/pandas

Tengo un marco de datos llamado entrega y cuando imprimo (delivery.columns) obtengo lo siguiente:

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')

Bueno, podemos ver claramente que hay una columna 'Rua'.

Además, si imprimo (delivery.Rua) obtengo un resultado adecuado:

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
...

Incluso si escribo "si 'Rua' en delivery.columns: print ('aquí estoy')" imprime el 'aquí estoy'. Entonces 'Rua' está ahí.

Bueno, en la línea inmediata después de que tengo este código:

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' ]]

Y voilá, me sale este extraño error:

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"

¿Alguien puede ayudar? Intenté stackoverflow pero nadie pudo ayudar. Empiezo a pensar que estoy loco y que 'Rua' es una ilusión de mi mente atribulada.

INFORMACIÓN ADICIONAL

Estoy usando este código justo antes de la línea de error:

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' ]]

EDITAR

Cosas nuevas y raras:
Me di por vencido y eliminé 'Rua' de ese último código, deseando que funcionara. Para mi sorpresa, tuve el mismo problema pero ahora con la columna '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"

EDITAR 2

Y luego me di por vencido con 'Número' y lo saqué. Entonces ocurrió el mismo problema con 'Complemento_endereço'. Luego eliminé 'Complemento_endereço'. Y le pasó a 'Telefone' y así sucesivamente.

* EDITAR 3 *

Si hago un pd.show_versions (), ese es el resultado:

VERSIONES INSTALADAS

cometer: Ninguno
python: 3.5.0.final.0
bits de pitón: 64
SO: Darwin
Versión del SO: 16.5.0
máquina: x86_64
procesador: i386
byteorder: pequeño
LC_ALL: Ninguno
IDIOMA: Ninguno

pandas: 0.18.1
nariz: ninguna
pip: 8.1.2
herramientas de configuración: 18.2
Cython: Ninguno
numpy: 1.11.0
scipy: 0.17.1
statsmodels: 0.6.1
xarray: Ninguno
IPython: Ninguno
esfinge: ninguna
chivo expiatorio: 0.4.1
dateutil: 2.5.3
pytz: 2016.4
blosc: Ninguno
cuello de botella: Ninguno
tablas: ninguna
numexpr: Ninguno
matplotlib: 1.5.1
openpyxl: Ninguno
xlrd: 1.0.0
xlwt: Ninguno
xlsxwriter: Ninguno
lxml: Ninguno
bs4: 4.5.1
html5lib: Ninguno
httplib2: Ninguno
apiclient: Ninguno
sqlalchemy: 1.1.3
pymysql: 0.7.11.Ninguno
psycopg2: Ninguno
jinja2: Ninguno
boto: Ninguno
pandas_datareader: Ninguno
Ninguno

Indexing

Comentario más útil

Esto es para aquellos que aterrizaron aquí después de buscar en Google para ver qué pasa.

Si está trabajando con un CSV o XLSX, asegúrese al 100% de que ninguno de los nombres de sus columnas tenga un espacio al principio o al final.

Al importar un CSV, noté que había un problema al obtener una columna. Al exportar el df a un csv y abrirlo en Excel, es imposible ver los espacios en blanco finales o iniciales. Tienes que abrirlo con el bloc de notas o el bloc de notas ++

Nuevamente, esto es para aquellos que aterrizaron aquí desde una búsqueda en Google. Asegurándose de que todos los espacios en blanco iniciales y finales se eliminen de los nombres de los encabezados de columna en su csv, xlsx o cualquier otra plantilla de archivo de marco de datos que pueda estar utilizando.

Todos 24 comentarios

@abutremutante : ¡Gracias por informar de esto! Parece realmente extraño, pero no podemos replicarlo en este momento porque no podemos ejecutar su código. ¿Podría proporcionarnos una muestra de código completa ?

Además, si pudiera proporcionar la salida de pd.show_versons en su cuadro de emisión inicial, sería genial.

¡Hola! Gracias por responder.
No me gustaría hacerlo público en github. ¿Puedo enviárselo por correo electrónico a ustedes?

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

@abutremutante https://github.com/abutremutante : ¡Gracias por informar de esto! Parece realmente extraño, pero no podemos replicarlo en este momento porque no podemos ejecutar su código. ¿Podría proporcionarnos una muestra de código completa?

Además, si pudiera proporcionar la salida de pd.show_versons en su cuadro de problema inicial, sería genial.

-
Recibes esto porque te mencionaron.
Responda a este correo electrónico directamente, véalo en GitHub https://github.com/pandas-dev/pandas/issues/17275#issuecomment-323213193 , o silencie el hilo https://github.com/notifications/unsubscribe-auth/ ARNqx54xVjjuQyYofj1-AEjp9NRL5AFnks5sZMD7gaJpZM4O63lz .

Preferiblemente no, ya que cualquiera que quiera abordar este tema necesitaría ver el código. ¿Puedes intentar replicar con una tabla diferente (o DataFrame ) que no contenga información confidencial?

Probé aquí:

importar pandas como pd
importar FindCos.FindCos_Functions como find # ese es un archivo donde escribo algunas funciones
importar fecha y hora
importar pdb

target = find.get_full_basics (negocio = 'seleccionar * de 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' ]
contratado_cos = 200

seleccionar elementos de las CNAE

selección = pd.DataFrame ()
para i en CNAE:
x = target.loc [target ['# CNAE']. str.startswith (i) == True]
selección = pd.concat ((selección, x))

FILTRACIÓN

selección = selección.loc [selección ['Capital_Social'] <100000000] .loc [selección ['situacao_cadastral'] == 'ATIVA'] \
.loc [selección ['situacao_especial']. isnull () == Verdadero] .loc [selección ['Natureza_Juridica']! = 'EMPRESA INDIVIDUAL DE RESP.LIMITADA (DE NATUREZA EMPRESARIA)'] \
.loc [selección ['Natureza_Juridica']! = 'EMPRESARIO (INDIVIDUAL)'] \
.loc [selección ['Estado']! = 'PA']. loc [selección ['Estado']! = 'AM'] \
.loc [selección ['Estado']! = 'RR']. loc [selección ['Estado']! = 'AC']. loc [selección ['Estado']! = 'RO']. loc [selección [ 'Estado']! = 'AP'] \
.loc [selección ['Estado']! = 'TO']

CONTROL DE DUPLICACIÓN

lista = ['archivo.csv']
selection = find.exclude_business (selección, lista)

COMPROBAR PERFIL

grupos = selección.groupby ('# CNAE')
selección ['porcentaje'] = grupos ['# CNAE']. transform ('tamaño') / len (selección)
selección = selección [['# CNAE', 'porcentaje']]. drop_duplicates (). sort_values ​​('porcentaje', ascendente = Falso)
selección ['muestras'] = ronda (((contratado_cos 1.05) selección ['porcentaje']))

entrega = pd.DataFrame ()
para i en selection.index:
sample = groups.get_group (selección ['# CNAE']. loc [i]). sample (selección ['muestras']. loc [i])
entrega = pd.concat ((entrega, muestra)). sort_values ​​('Capital_Social', ascendente = Falso) #. renombrar (columnas = {'Capital_Social': 'Score_Tamanho'})

ASEGURARSE DE QUE RUA EXISTE REALMENTE

imprimir (entrega.columnas)
imprimir (entrega.Rua)
imprimir (delivery.set_index ('cnpj'). columnas)
entrega = entrega.rename (columnas = {'Rua': 'Rua'})
si 'Rua' en delivery.columns:
imprimir ('aquí estoy')

LÍNEA PROBLEMA

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 : Gracias, pero desafortunadamente, este código no es replicable para nosotros. No podemos ejecutar import FindCos.FindCos_Functions . Intente crear DataFrame desde cero y reproducir el problema.

Además, si pudiera proporcionar la salida de pd.show_versons en su cuadro de problema inicial, sería genial.

@gfyoung : agregué al cuadro de problema inicial el pd.show_versions.
En cuanto al marco de datos, es un marco de datos bastante largo. Hice un csv usando las 10 primeras líneas, aquí mismo:

target = find.get_full_basics (business = 'seleccionar * del límite de sqltable 10;', test_mode = False)
target.to_csv ('target10items.csv')

Lo adjunto aquí.
target10items.csv.zip

1) ¿Puede replicar su problema con este DataFrame más pequeño?
2) Noto que estás usando una versión muy antigua de pandas (estamos en 0.20.3 este momento). ¿Puede intentar actualizar y ver si eso resuelve su problema?

'Bairro' no está en su salida para print(delivery.columns) pero está en la lista que proporciona después de set_index . Es un poco sospechoso que 'Bairro' aparezca inmediatamente antes de 'Rua' en esa lista. ¿Quizás hay un problema en el mensaje de error al seleccionar la columna que falta?

De acuerdo, creo que el problema es que 'Bairro' es en realidad la clave que falta, pero pandas 0.18.1 tenía un error en el que el mensaje de error muestra el elemento incorrecto como la clave que falta.

Usando el siguiente código

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' ]]

En pandas 0.18.1 , obtengo el siguiente error:

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

Sin embargo, en pandas 0.20.3 , obtengo el error corregido:

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

usted
Clavado
Eso
@jschendel

Muchas gracias @gfyoung

Muchas gracias.

Cerrando, ya que parece que su problema ha sido resuelto.

Hola
No veo ninguna idea real para resolver el problema, @gfyoung. ¿Por qué cierras esto? Todavía tengo este problema. SIN queja, tan cansado de este error.

@ wangxuesong29 ¿tienes un ejemplo mínimo? http://matthewrocklin.com/blog/work/2018/02/28/minimal-bug-reports

Tengo el mismo problema que tú. He observado que si cambio los datos en formato .csv en el programa OpenOffice, se produce el error. En lugar de eso, descargué los datos de Internet y los edité en un editor simple de Notepad ++. Entonces funciona normalmente. Sé que tal vez esta solución no ayude en su caso, pero tal vez debería cambiar el editor de texto o el programa que admite archivos .csv.

ERROR :
pandas versión 0.23.4
Tiene el mismo problema, dejando el mismo código que el anterior,

Después de ejecutar el código obtengo:

'Barrio' no está en el índice

CODIGO :
`importar pandas como pd
importar numpy como np

cols = pd.Index (['Address_Complement', 'cnpj', 'Foundation_Date', 'Número',
'Razón_corporativa', 'CEP', 'situacao_cadastral', 'situacao_especial', 'Calle',
'Fantasy_Name', 'last_revenue_normalized', 'last_revenue_year',
'Teléfono', 'correo electrónico', 'Capital_Social', 'Ciudad', 'Estado',
'Razón_corporativa', 'nombre_barrio', 'Nature_Legal', 'CNAE', '#CNAE',
'Secondary_CNAEs', 'Personas', 'porcentaje'],
dtype = 'objeto')
entrega = pd.DataFrame (np.random.random (tamaño = (5, len (cols))), columnas = cols)

delivery = delivery.set_index ('cnpj') [['Company_Name', 'Fantasy_Name', 'Foundation_Date', 'ZIP Code', 'State', 'City', 'Neighborhood', 'Street', 'Number', ' Address_Complement ',' Phone ',' email ',' Social_Capital ',' CNAE ',' #CNAE ',' Legal_Nature ',' Personas ']]
'

Esto es para aquellos que aterrizaron aquí después de buscar en Google para ver qué pasa.

Si está trabajando con un CSV o XLSX, asegúrese al 100% de que ninguno de los nombres de sus columnas tenga un espacio al principio o al final.

Al importar un CSV, noté que había un problema al obtener una columna. Al exportar el df a un csv y abrirlo en Excel, es imposible ver los espacios en blanco finales o iniciales. Tienes que abrirlo con el bloc de notas o el bloc de notas ++

Nuevamente, esto es para aquellos que aterrizaron aquí desde una búsqueda en Google. Asegurándose de que todos los espacios en blanco iniciales y finales se eliminen de los nombres de los encabezados de columna en su csv, xlsx o cualquier otra plantilla de archivo de marco de datos que pueda estar utilizando.

También tengo este error.
Las columnas se nombran correctlz pero cuando uso seaborn con mi archivo csv obtengo el error (mi columna es nuestra de índice)

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

el mensaje de error:
KeyError: "['predLabel' 'trueLabel'] no está en el índice"

Yo tambien tengo el mismo problema
Las columnas tienen el nombre correcto, pero cuando uso seaborn con mi archivo csv, aparece el error (mi columna está fuera del índice)

importar seaborn como sns
importar pandas como pd
df =
pd.read_csv ('lawma1.csv', index_col = [0, 1], delimiter = ',')
sns.lmplot (x = 'WEEK1', y = 'FLOTA', data = df) .savefig ('law.png')

el mensaje de error:
KeyError: "['FLEET'] no está en el índice

Tuve este error y fue porque tenía un punto "." al final del nombre de una columna, funcionó después de que lo eliminé.
podaci = pd.read_csv('data/fifa19a.csv', names=['id', 'ime', 'godine', 'ocjena', 'potencijal.', 'bodovi', 'stopalo', 'placa_tis_eur', 'cijena_mil_eur'])
Fue así en la columna "potencijal"
Podría ser un error

estoy enfrentando el mismo problema, incluso usé la impresión (X.columns) y mostró el índice 'exposición_end' pero cuando lo usé en centroids_new = X.groupby (["clusters"]). mean () [[" exposición_end "," Duración "]] muestra el error 'exposición_end' no en el índice. Por favor ayuda, estoy atrapado aquí durante las últimas dos horas.

encontré la solución a mi problema.
Estaba usando la declaración anterior que centroids_new = X.groupby (["clusters"]). mean () [["exposición_end", "Duration"]] usé x.mean (axis = 1) arriba de esta declaración y luego usó la declaración
centroids_new = X.groupby (["clusters"]). mean () [["exposición_end", "Duración"]] sin la media y funcionó bien. no pudo usar axis en la declaración antes porque no estaba trabajando con groupby, así que tuve que hacerlo en dos pasos.
y el principal problema por el que estaba sucediendo era que el eje no estaba establecido en 1.

Encontré una solución al problema, funciona perfectamente para mí.

Compruebe si su archivo csv está separado por ',' o '; '. En mi caso, mis datos estaban separados por ',' pero estaba usando '; '.

Tan simplemente agregado

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

"columna" y "columna"

Son dos cosas distintas, la primera tiene un espacio al frente. ASÍ QUE SIMPLEMENTE AÑADIR ESPACIO DONDE ESTÁ EL ESPACIO

P.ej:
df ["columna"] funcionó para mí

¿Fue útil esta página
0 / 5 - 0 calificaciones