Python: удаление содержимого ячейки на основе определенного условия

У меня есть файл * .xlsx, как показано ниже -

           A                              B                        C
                                   [['Neutral']]                ['nan']
                                   [['Neutral']]                ['nan']
          Bad                      [['Negative']]               ['Bad']
          Meh                      [['Neutral']]                ['Meh']
                                   [['Neutral']]                ['nan']

Я пытаюсь удалить все значения [['Neutral']] and ['nan'] в столбце B и C, ТОЛЬКО если их значение - null.

Это мой код -

df1 = pd.read_excel(path)

for i, row in df1.iterrows():
    if pd.isnull(row[0]):
        # del row[1]
        # del row[2]
        row[1] = 0
        row[2] = 0

Мой код отлично находит все нулевые значения, но не может очистить переменную столбца s B и C. Что я делаю не так?

Ожидаемый результат-

       A                              B                        C


      Bad                      [['Negative']]               ['Bad']
      Meh                      [['Neutral']]                ['Meh']

И да, пустые места / ячейки все еще должны существовать.

1
0
541
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

попробуй это,

mask=df['A'].isnull()
df.loc[mask]=''

Выход:

     A               B        C
0                              
1                              
2  Bad  [['Negative']]  ['Bad']
3  Meh   [['Neutral']]  ['Meh']
4                              

Для этой проблемы вам не нужно использовать цикл for в пандах,

Объяснение

  1. Найдите индекс любого места, где A пусто

  2. заменить пустым в выбранном индексе

Обновлено:

Чтобы удалить из определенных столбцов,

df.loc[mask,['B','C']]=''

Могу ли я быть более конкретным? Он работает, но также удаляет строки в других столбцах. Могу ли я, возможно, указать, что если A имеет значение null, он должен удалить строку в столбце B, а не в столбце C

SalazarSid 31.10.2018 13:10

Вы можете просто присвоить его, взяв индексы нулевых значений

df.loc[df.A.isnull()] = ''

Из:

        A   B   C
0           
1           
2   Bad [['Negative']]  ['Bad']
3   Meh [['Neutral']]   ['Meh']
4           

Другие вопросы по теме