Один из столбцов в моем df хранит список, а у некоторых необработанных файлов есть пустые элементы в списке. Например:

[ ]

["X", "Y"]

[ ]

Др...

Как можно взять только сырье, чей список не пуст?

Следующий код не работает.

df[df["col"] != []] # ValueError: Lengths must match to compare
df[pd.notnull(df["col"])] # The code doesn't issue an error but the result includes an empty list
df[len(df["col"]) != 0] # KeyError: True
10
Blaszard 5 Июл 2019 в 16:21

5 ответов

Лучший ответ

Ты можешь сделать это:

df[df["col"].str.len() != 0]

Примере:

import pandas as pd

df = pd.DataFrame({"col": [[1], [2, 3], [], [4, 5, 6], []]}, dtype=object)
print(df[df["col"].str.len() != 0])
#          col
# 0        [1]
# 1     [2, 3]
# 3  [4, 5, 6]
4
jdehesa 5 Июл 2019 в 13:24

bool

Пустой список в логическом контексте: False. Пустой список - это то, что мы называем фальси. Программисту хорошо знать, какие объекты ложные и правдивые.

Вы также можете нарезать фрейм данных с помощью логического списка (не только логического ряда). И так, я буду использовать понимание, чтобы ускорить проверку.

df[[bool(x) for x in df.col]]

Или с еще меньшим количеством символов

df[[*map(bool, df.col)]]
1
piRSquared 5 Июл 2019 в 13:50

Это, наверное, самое эффективное решение.

df[df["col"].astype(bool)]
3
GZ0 5 Июл 2019 в 20:27

Вы можете проверить, являются ли списки пустыми, используя str.len (), а затем отрицать:

df[df["col"].str.len() != 0]
...

str.len для встроенной функции Python, возвращающей длину объекта.

И ваш вывод должен быть ожидаемым.

0
41 72 6c 5 Июл 2019 в 13:29

Попробуй это:

df[df['col'].apply(len).gt(0)]
5
Quang Hoang 5 Июл 2019 в 13:26