"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo insertar listas en celdas del DataFrame de Pandas sin errores?

¿Cómo insertar listas en celdas del DataFrame de Pandas sin errores?

Publicado el 2024-11-06
Navegar:794

How to Insert Lists into Pandas DataFrame Cells Without Errors?

Insertar listas en celdas de Pandas

Problema

En Python, intentar insertar una lista en una celda de un Pandas DataFrame puede generar errores o resultados inesperados. Por ejemplo, al intentar insertar una lista en la celda 1B de un DataFrame df:

df = pd.DataFrame({'A': [12, 23], 'B': [np.nan, np.nan]})
abc = ['foo', 'bar']

Lo siguiente intenta insertar la lista abc en 1B, pero produce errores o una inserción incorrecta:

  1. df.ix[1 ,'B'] = abc - Error: debe tener claves de longitud y valores iguales cuando se configura con un iterable
  2. df.ix[1,'B'] = [abc] - Inserta una lista con un elemento: [['foo', 'bar']]
  3. df.ix[1,'B'] = ', '.join(abc) - Inserta una cadena: "foo, bar"
  4. df.ix[1,'B'] = [', '.join(abc)] - Inserta una lista con un elemento: ['foo, bar']

Solución

Para insertar listas en celdas de un DataFrame sin errores, use el método at, que siempre hace referencia a un solo valor:

df.at[1, 'B'] = ['foo', 'bar']

Esto insertará la lista abc en 1B como se esperaba:

    A  B
0  12  NaN
1  23  ['foo', 'bar']

Tenga en cuenta que la columna DataFrame debe tener dtype=object para permitir la inserción de la lista. Por ejemplo:

df['B'] = df['B'].astype('object')
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3