Estoy configurando una columna basada en una lista de índices, que calculé anteriormente. También eliminé algunos índices durante los cálculos, por lo que algunos índices ya no forman parte de mi marco de datos. Este ejemplo simplificado muestra lo que está sucediendo ahora:
df = pd.DataFrame(data=[[1 , 2, False], [4 , 5, False]], columns=["col1", "col2", "col3"], index=[1, 3])
df.loc[[1, 2], 'col3'] = True
Obviamente estoy recibiendo un KeyError:
KeyError: '[2] not in index'
Desafortunadamente, .loc() no proporciona algo como error="ignorar". ¿Sería iterar sobre la lista detectando el KeyError con un bloque try-catch la única solución o hay una manera mejor de hacerlo?
¿Alguna pista? Gracias
------------------------------------
Puedes usar .index.intersection() para seleccionar sólo "buenosteclas":
good_keys = df.index.intersection([1, 2])
df.loc[good_keys, "col3"] = True
print(df)
Impresiones:
col1 col2 col3
1 1 2 True
3 4 5 False
0
------------------------------------
reindexar
Coloca filas o columnas nulas donde los valores de índice no existían antes.
df = df.reindex([1, 2, 3])
df.loc[[1, 2], 'col3'] = True
df
col1 col2 col3
1 1.0 2.0 True
2 NaN NaN True
3 4.0 5.0 False