#python #pandas
#python #pandas
Вопрос:
РЕДАКТИРОВАТЬ: Извините, я перепутал строки со столбцами (новичок здесь)
У меня есть CSV, где есть 3 столбца,
heading, image and description
.
Некоторые элементы в description пусты, и я хочу удалить полный столбец, если description пуст или имеет
length < 1
Во-первых, я получил все столбцы, длина
description < 1
которых соответствует использованию этого кода :
for i in df['description']:
if len(i) < 1 :
print('Empty')
Вывод :
Empty
Empty
Это означает, что есть 2 столбца с описанием длины < 1, теперь я пытаюсь их удалить :
for i in df['description']:
if len(i) < 1 :
df.drop(i, inplace=True, axis=1)
Но все же есть эти 2 столбца с пустыми данными, как их удалить, что не так в моем коде? Пожалуйста, укажите
также пробовал :
df = df.drop(df.columns[[i]], axis=1)
но ничего не работает
Ответ №1:
Я думаю, что есть небольшая путаница. Вы говорите, что хотите удалить весь столбец, но это означает удаление description
столбца; вместо этого, я думаю, вы говорите о строке с пустым описанием.
Если это ваш случай, то вам просто нужно перебрать ваш фрейм данных (также с индексом) и проверить, является ли значение description
null или empty; если это правда, вы можете удалить строку на месте ( index=N
означает i, axis=0
).
for i, description in zip(df.index, df['description']):
if not description: # True if None and empty string
df.drop(index=i, inplace=True)
Это пример того, что вы получаете.
before drop:
heading image description
0 foo a None
1 bar b
2 baz c some text
after drop:
heading image description
2 baz c some text
Однако, если вам нужно удалить весь столбец, если есть строка None / empty, сначала вам нужно проверить, есть ли значения, соответствующие вашему поиску, и если да, удалите этот столбец.
df.applymap()
применяет функцию ко всему фрейму данных, затем вы сохраняете только description
столбец, и вы получаете серию bool. При any()
этом вы проверяете, имеет ли значение True хотя бы один элемент (None или пустая строка). Если да, удалите весь description
столбец.
if any(df.applymap(lambda x: not x)['description']):
df.drop(columns='description', inplace=True)
Опять же, вот пример результата.
before drop:
heading image description
0 foo a None
1 bar b
2 baz c some text
after drop:
heading image
0 foo a
1 bar b
2 baz c
Комментарии:
1. Извините, я перепутал строки со столбцами (здесь новичок). Я хотел удалить строку, а не столбец
2. Следуя вашему коду, я попробовал это: для i в df[‘description’]: если len(i) < 1: df.drop(index=i, inplace=True) , в нем все еще есть элементы. не удалено
3. Я дал вам правильный ответ с примером результата. Кстати, вы задействуете не index (
i
), А значения (None
,''
,'some text'
и т. Д.)4. Как правильно написать, сэр, пожалуйста, укажите
5. Просто проверьте первый блок кода в моем ответе, это правильный
for
цикл