Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

327
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda