python-3.x pandas dataframe

python 3.x - ¿Cómo puedo colocar filas en marcos de datos que contienen listas vacías?



python-3.x pandas (6)

He creado un marco de datos con 3 columnas, el tercero contiene listas, quiero eliminar filas que contengan una lista vacía en esa celda.

Lo he intentado con

df[df.numbers == []] and df[df.numbers == null] but nothing works.

name country numbers Lewis Spain [1,4,6] Nora UK [] Andrew UK [3,5]

El resultado será un marco de datos sin la fila de Nora.


Digamos que sus datos están configurados de esta manera:

import pandas as pd df = pd.DataFrame([{''name'': "Lewis", ''country'': "Spain", "numbers": [1,4,6]}, {''name'': "Nora", ''country'': "UK", "numbers": []}, {''name'': "Andrew", ''country'': "UK", "numbers": [3,5]}])

Podría iterar sobre el marco de datos y agregar solo las filas que no tienen una matriz de números vacía a un nuevo marco de datos llamado "newDF". Por ejemplo:

newDFArray = [] for index, row in df.iterrows(): emptyArrayCheck = row["numbers"] if len(emptyArrayCheck) > 0: newDFArray.append(row) newDF = pd.DataFrame(newDFArray) newDF

Esto dará lugar a:

country name numbers 0 Spain Lewis [1, 4, 6] 2 UK Andrew [3, 5]


Umm cheque bool

df[df.numbers.astype(bool)]


Una forma de hacerlo es crear una nueva columna que contenga la longitud de df.numbers mediante:

df[''len''] = df.apply(lambda row: len(row.numbers), axis=1)

y luego filtre por esa columna haciendo:

df[df.len > 0]


Usando la idea de que el resultado de cualquier lista multiplicada por 0 da una lista vacía, una forma de hacer esto es:

In [29]: df[df.numbers != df.numbers * 0] Out[29]: name numbers country 0 Lewis [1, 4, 6] Spain 2 Andrew [3, 5] UK


Use series.str.len() para verificar la longitud de los elementos en la lista y luego filtre donde es igual a 0:

df[~df.numbers.str.len().eq(0)]

name country numbers 0 Lewis Spain [1, 4, 6] 2 Andrew UK [3, 5]


solo comprueba len> 0

df[df[''numbers''].str.len()>0]