Как проверить, пуст ли список внутри фрейма данных Pandas - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть pandas фрейм данных

list1 = ['A','B', 'C', 'D' ]
list2 = ['P','Q', 'R', 'S' ]
list3 = ['A', 'B', 'C', 'D']
list4 = [[1,3,5], [], [2,4,1,5], []]

df = pd.DataFrame({'col1' : list1,
 'col2' : list2,
 'col3':list3,
 'numlist' : list4

})
print(df)     

col1 col2 col3       numlist
0    A    P    A     [1, 3, 5]
1    B    Q    B            []
2    C    R    C  [2, 4, 1, 5]
3    D    S    D            []

Я хочу получить индекс всех строк, где список столбцов не пуст, а затем создать новый фрейм данных со строками, соответствующими индексам. Я пытаюсь следующий код

df[(len(df['numlist']))==0]

Но этот код выдает Key Error. Как я могу добиться того же?

Ответы [ 2 ]

3 голосов
/ 23 апреля 2020

Пустые списки, преобразованные в возвращаемые значения boolen False возможна фильтрация следующим образом:

df1 = df[df['numlist'].astype(bool)]

Ваше решение должно быть изменено на Series.str.len с Series.ne для не равных:

df1 = df[df['numlist'].str.len().ne(0)]

Альтернатива:

df1 = df[df['numlist'].str.len() != 0]
print(df1)  
  col1 col2 col3       numlist
0    A    P    A     [1, 3, 5]
2    C    R    C  [2, 4, 1, 5]
1 голос
/ 23 апреля 2020

Вы можете использовать apply и проверить с помощью x != [] условия, что список пуст или нет.

>>> df = df[df.numlist.apply(lambda x: x != [])]
>>> df
  col1 col2 col3       numlist
0    A    P    A     [1, 3, 5]
2    C    R    C  [2, 4, 1, 5]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...