Кадр данных переопределяет весь столбец - PullRequest
0 голосов
/ 28 июня 2019

У меня есть одна проблема при обновлении таблицы Excel с использованием панд.

У меня есть один столбец с именем 'item' в моем листе Excel и список некоторых строк в Python. Я перебираю каждый элемент списка, чтобы проверить, существует ли строка списка в столбце item таблицы Excel. Если существует, я обновляю строку в той же строке в brand_name

Вот мой код

for index_label, row_series in new_df.iterrows():
    for brnd in  ['brand1','brand2','brand3']:
        try:

            if brnd in  row_series['item']:
                new_df.at[index_label,'brand_name'] = brnd

            else:
                new_df.at[index_label,'brand_name'] = ''
        except:

Теперь проблема в том, что вместо обновления для всех брендов. Я вижу данные только для brand3 в столбце brand_name в Excel и нигде не вижу brand1 и brand2 в столбце brand_name. Однако я вижу подстроки brand2 и brand3 в столбце item моего листа Excel.

Пожалуйста, помогите мне, почему не все бренды указаны в столбце, почему только последний.

Что-то о листе Excel.

item   , brand_name 

some_brand1_two_like_thi     
some_brand2_two_like_thi     
some_like_this_brand1
brand3 two_like_thi     
brand3 two like thi   

1 Ответ

0 голосов
/ 28 июня 2019

Вы записываете результаты блока if / else brand3 поверх результатов brand1 и brand2.Попробуйте выполнить цикл, который вы написали:

  • он использует «brand1» и проверяет, есть ли «brand1».Если он найдет его, он напишет 'brand1' в новом df.
  • вы переходите к следующему шагу цикла, «brand2» там не будет, и он будет писать пустую строку в той же позиции, удаляя «brand1».То же самое относится и к 'brand3', так что это единственный, который вы можете найти.

Добавление разрыва после успешной части оператора if / else должно быть достаточным:

if brnd in  row_series['item']:
   new_df.at[index_label,'brand_name'] = brnd
   break
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...