If-else ValueError Значение истинности ряда неоднозначно. Используйте a.empty, a.bool(), a.item(), a.any() или a.all()

Я пытаюсь заполнить отсутствующие значения, используя условие if-else, но получаю ошибку значения Как я могу решить? Я прочитал другой подобный пост, но не смог применить к своей проблеме

Я пробовал if-else (ошибка значения), а также повторял индексацию, используя цикл for

При использовании цикла for он запускает все строки только через оператор if и не переходит к другому

Только если оператор else (ошибка значения)

if data['Waiting Time'] > 0:
    data['Existing_Date'].fillna(data['New_time'],inplace=True) #if wait_time > 0         
else:
    data['Existing_Date'].fillna(data['Actual Date'],inplace=True) #if wait_time > 0

Использование индексации цикла For (работает только оператор if)

for i in data.index:
    if data['Waiting Time'].iloc[i] > 0:
        data['Existing_Date'].fillna(data['New_time'],inplace=True) #if wait_time > 0    
    else:
        data['Existing_Date'].fillna(data['Actual Date'],inplace=True) #if wait_time = 0

С оператором if only Ошибка значения

с циклом for: результат только в операторе if, а не в операторе else

Как я могу это решить? Спасибо


person Rick707    schedule 03.08.2019    source источник
comment
Не могли бы вы поделиться TraceBack для ошибки?   -  person calestini    schedule 03.08.2019
comment
Можете ли вы привести небольшой пример того, как data выглядел до и как он должен измениться после?   -  person Karl Knechtel    schedule 03.08.2019
comment
Столбец @KarlKnechtel data ['Exisitng_Date'] имеет отсутствующее значение. Я хочу заполнить столбец New_time, если df (время ожидания - равные строки имеют целые числа) больше 0, в противном случае с типом столбца фактической даты - Datetime64   -  person Rick707    schedule 03.08.2019
comment
stackoverflow.com/questions/27041724/ помочь?   -  person Karl Knechtel    schedule 03.08.2019


Ответы (1)


Причина, по которой первый код не вводит else:, заключается в том, что вы тестируете весь фрейм данных, и он вернет True для существования. На самом деле вы не запрашиваете значения, соответствующие условию.

Причина, по которой вы получаете ValueError, заключается в том, что вы тестируете несколько значений одновременно (весь массив значений), и в этом случае вы потенциально получаете несколько True и несколько False.

Я бы не рекомендовал зацикливаться на dataframe, как вы. Вы можете использовать loc и некоторую логику. Это действительно зависит от точного вывода, который вы ищете, но, вероятно, pandas у вас уже есть инструменты для вашего использования без необходимости повторения dataframe

data.loc[data['Waiting Time'] > 0,'Existing_Date'].fillna(data['New_time'],inplace=True)
data.loc[data['Waiting Time'] <= 0,'Existing_Date'].fillna(data['Actual Date'],inplace=True)
person calestini    schedule 03.08.2019
comment
Я пробовал это, он показывает мне значения «NaT» в отсутствующих полях после запуска - person Rick707; 03.08.2019
comment
Ваши данные как datetime или как str? Согласно документам: Для типов datetime64[ns] NaT представляет отсутствующие значения. Это псевдособственное дозорное значение, которое может быть представлено NumPy в единственном числе dtype (datetime64[ns]). объекты pandas обеспечивают совместимость между NaT и NaN. - person calestini; 03.08.2019