Quiero crear un marco de datos modificado con las columnas especificadas. Intenté lo siguiente, pero aparece el error "Pasar lista de me gusta a .loc o [] con etiquetas faltantes ya no es compatible"
# columns to keep filtered_columns = ['text', 'agreeCount', 'disagreeCount', 'id', 'user.firstName', 'user.lastName', 'user.gender', 'user.id'] tips_filtered = tips_df.loc[:, filtered_columns] # display tips tips_filteredGracias
Algunas de las columnas de la lista no están incluidas en el marco de datos, si desea hacerlo, intentemos reindex
tips_filtered = tips_df.reindex(columns=filtered_columns)Encontré el mismo error con etiquetas de índice de fila faltantes en lugar de columnas .
Por ejemplo, tendría un conjunto de datos de productos con los siguientes identificadores: ['a','b','c','d']. Almaceno esos productos en un dataframe con índices ['a','b','c','d'] :
df=pd.DataFrame(['product a','product b','product c', 'product d'],index=['a','b','c','d']) Ahora supongamos que tengo un índice de producto actualizado: row_indices=['b','c','d','e'] en el que 'e' corresponde a un nuevo producto: 'product e'. Tenga en cuenta que 'e' no estaba presente en mi índice original ['a','b','c','d'] .
Si trato de pasar este índice actualizado a mi marco de datos df: df.loc[row_indices,:] ,
Recibiré este desagradable mensaje de error:
KeyError: "Pasar list-likes a .loc o [] con etiquetas faltantes ya no se admite. Faltaban las siguientes etiquetas: Index(['e'], dtype='object').
Para evitar este error, necesito hacer una intersección de mi índice actualizado con el índice original:
df.loc[df.index.intersection(row_indices),:]esto está en línea con la recomendación de lo que pandas docs
Parece que Pandas ha desaprobado este método de indexación. Según sus documentos :
Este comportamiento está en desuso y mostrará un mensaje de advertencia que apunta a esta sección. La alternativa recomendada es usar .reindex()
Usando el nuevo método recomendado , puede filtrar sus columnas usando:
tips_filtered = tips_df.reindex(columns = filtered_columns) .
NB: para reindexar filas, usaría reindex(index = ...) (Más información aquí ).
Tuve el mismo problema al intentar crear nuevas columnas junto con las existentes:
df = pd.DataFrame([[1,2,3]], columns=["a","b","c"]) def foobar(a,b): return a,b df[["c","d"]] = df.apply(lambda row: foobar(row["a"], row["b"]), axis=1) La solución fue agregar result_type="expand" como argumento de apply() :
df[["c","d"]] = df.apply(lambda row: foobar(row["a"], row["b"]), axis=1, result_type="expand")Este error aparece si se indexa algo que no está presente: reset_index() funcionó para mí, ya que estaba indexando un subconjunto del marco de datos real con índices reales, en este caso, es posible que la columna no esté presente en el marco de datos.