Как удалить из столбца строку с пустым списком?
Дан датафрейм:
d = {'name': [['rick', 'mike', 'morty'], [], ['brick', 'nick'], ['rick', 'reaven', 'bart', 'homer'], ['rick', 'morty']],
'Date': ['11/05/2011', '9/02/2010', '1/01/2014', '12/20/2020', '9/30/2009'],
'Address': ['AR', 'YU', 'RU', 'EU', 'BY']}
df = pd.DataFrame(data = d)
Как удалить строку с пустым списком?
Ответы (4 шт):
Автор решения: magistar
→ Ссылка
Если вам нужно удалить сам список, то можно с помощью цикла for таким образом:
for i in d['name']:
if len(i) == 0:
del d['name'][d['name'].index(i)]
Обратите внимание, что если пустых списков будет больше одного, то это не сработает. Уточните, если необходимо удалить произвольное количество пустых списков.
Если нужно удалить из словаря весь ключ, где находится пустой список, со всеми значениями:
flag = False
for i in d:
for j in d[i]:
if len(j) == 0:
del d[i]
flag = True
break
if flag:
break
Автор решения: MaxU - stop genocide of UA
→ Ссылка
Воспользуйтесь методом Series.str.len():
res = df.loc[df["name"].str.len().gt(0)]
результат:
In [104]: res
Out[104]:
name Date Address
0 [rick, mike, morty] 11/05/2011 AR
2 [brick, nick] 1/01/2014 RU
3 [rick, reaven, bart, homer] 12/20/2020 EU
4 [rick, morty] 9/30/2009 BY
Автор решения: CrazyElf
→ Ссылка
Можно через apply применить len и потом проверить, что длина списка не нулевая:
df = df[df['name'].apply(len) > 0]
df после этого:
name Date Address
0 [rick, mike, morty] 11/05/2011 AR
2 [brick, nick] 1/01/2014 RU
3 [rick, reaven, bart, homer] 12/20/2020 EU
4 [rick, morty] 9/30/2009 BY
Автор решения: SergFSM
→ Ссылка
вот так еще тоже работает:
df.loc[df.name.astype(bool)]
'''
name Date Address
0 [rick, mike, morty] 11/05/2011 AR
2 [brick, nick] 1/01/2014 RU
3 [rick, reaven, bart, homer] 12/20/2020 EU
4 [rick, morty] 9/30/2009 BY