Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

332
Vistas
¿Por qué la asignación de .loc con dos conjuntos de corchetes da como resultado NaN en un pandas.DataFrame?

Tengo un marco de datos:

nombre años
0 Pablo 25
1 Juan 27
2 Cuenta 23

Sé que si entro:

 df[['name']] = df[['age']]

Obtendré lo siguiente:

nombre años
0 25 25
1 27 27
2 23 23

Pero espero el mismo resultado del comando:

 df.loc[:, ['name']] = df.loc[:, ['age']]

Pero en cambio, me sale esto:

nombre años
0 Yaya 25
1 Yaya 27
2 Yaya 23

Por alguna razón, si omito esos corchetes [] alrededor de los nombres de las columnas, obtendré exactamente lo que esperaba. Ese es el comando:

 df.loc[:, 'name'] = df.loc[:, 'age']

da el resultado correcto:

nombre años
0 25 25
1 27 27
2 23 23

¿Por qué dos pares de corchetes con .loc dan como resultado NaN? ¿Es algún tipo de error o es un comportamiento intencionado? No puedo entender la razón de tal comportamiento.

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Esto se debe a que, para la asignación de loc , todos los ejes de índice están alineados, incluidas las columnas: dado que la age y el name no coinciden, no hay datos para asignar, de ahí los NaN.

Puede hacer que funcione cambiando el nombre de las columnas:

 df.loc[:, ["name"]] = df.loc[:, ["age"]].rename(columns={"age": "name"})

o accediendo a la matriz numpy:

 df.loc[:, ["name"]] = df.loc[:, ["age"]].values
over 4 years ago · Santiago Trujillo Denunciar

0

Cuando usa corchetes dobles [[]], está asignando un DataFrame. Lo que quiere es asignar una Serie (columna), y para eso usa solo un corchete [].

Aquí hay algo de código:

 import pandas as pd df = pd.DataFrame({'name':['Paul','John','Bill'], 'age':[25,27,23]}) print('Inital Dataframe:\n',df) df[['name']] = df[['age']] print("\ndf[['name']] = df[['age']]\n",df) print("df.loc[:, ['age']]:", type(df.loc[:, ['age']])) print("df.loc[:, ['name']]:", type(df.loc[:, ['name']])) df.loc[:, ['name']] = df.loc[:, ['age']] print("\ndf.loc[:, ['name']] = df.loc[:, ['age']]\n",df) print('=======================') df = pd.DataFrame({'name':['Paul','John','Bill'], 'age':[25,27,23]}) print('Inital Dataframe:\n',df) print("type(df.loc[:, 'age']):", type(df.loc[:, 'age'])) print("type(df.loc[:, 'name']):", type(df.loc[:, 'name'])) df.loc[:, 'name'] = df.loc[:, 'age'] print("\ndf.loc[:, 'name'] = df.loc[:, 'age']\n",df)

Y la salida:

 Inital Dataframe: name age 0 Paul 25 1 John 27 2 Bill 23 df[['name']] = df[['age']] name age 0 25 25 1 27 27 2 23 23 df.loc[:, ['age']]: <class 'pandas.core.frame.DataFrame'> df.loc[:, ['name']]: <class 'pandas.core.frame.DataFrame'> df.loc[:, ['name']] = df.loc[:, ['age']] name age 0 NaN 25.0 1 NaN 27.0 2 NaN 23.0 ======================= Inital Dataframe: name age 0 Paul 25 1 John 27 2 Bill 23 type(df.loc[:, 'age']): <class 'pandas.core.series.Series'> type(df.loc[:, 'name']): <class 'pandas.core.series.Series'> df.loc[:, 'name'] = df.loc[:, 'age'] name age 0 25 25 1 27 27 2 23 23

Sin embargo, aquí hay otro comportamiento extraño: ¡Asignar los corchetes dobles a las variables de diferencia, digamos df1 y df2 , y luego df1 = df2 funciona! Aquí hay algo más de código:

 df = pd.DataFrame({'name':['Paul','John','Bill'], 'age':[25,27,23]}) print('Inital Dataframe:\n',df) df1 = df.loc[:, ['name']] df2 = df.loc[:, ['age']] print("\ndf1 = df.loc[:, ['name']]\n",df1) print("\ndf2 = df.loc[:, ['age']]\n",df2) df1=df2 print("\ndf1=df2\ndf1:\n",df1)

Y la salida:

 Inital Dataframe: name age 0 Paul 25 1 John 27 2 Bill 23 df1 = df.loc[:, ['name']] name 0 Paul 1 John 2 Bill df2 = df.loc[:, ['age']] age 0 25 1 27 2 23 df1=df2 df1: age 0 25 1 27 2 23
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda