Не является условным выражением NaN для python 3 и pandas

Я пытаюсь создать новый столбец в фрейме данных pandas, вычислив значение из существующих столбцов.

У меня есть 3 существующих столбца ("launched_date", "item_published_at", "item_created_at")

Однако мой оператор «if row[column_name] not None:» разрешает столбцы со значением NaN и не переходит к следующему оператору.

В приведенном ниже коде я бы не ожидал, что значение «нан» будет напечатано после первого условного выражения, я бы ожидал что-то вроде «2018-08-17».

df['adjusted_date'] = df.apply(lambda row: adjusted_date(row), axis=1)



def adjusted_launch(row): 
    if row['launched_date']is not None:
        print(row['launched_date'])
        exit()
        adjusted_date = date_to_time_in_timezone(row['launched_date']) 

    elif row['item_published_at'] is not None:
        adjusted_date = row['item_published_at']#make datetime in PST
    else:
        adjusted_date = row['item_created_at'] #make datetime in PST
    return adjusted_date

Как я могу правильно структурировать этот условный оператор?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
9 849
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Сначала заполните «нан» как строку, где данные пусты.

df.fillna("nan",inplace=True)

Затем в функции вы можете применить условие, например:

def adjusted_launch(row): 
    if row['launched_date'] !='nan':
......

Второе солнце

import numpy as np
df.fillna(np.nan,inplace=True)

#suggested by  @ShadowRanger
def funct(row):
    if row['col'].notnull():
        pass

Или просто измените тест на использовать pandas.isnull/pandas.notnull, не изменяя исходный фрейм данных.

ShadowRanger 15.07.2019 19:09

@ShadowRanger Я обновил ответ с вашим предложением

tawab_shakeel 15.07.2019 19:13
df = df.where((pd.notnull(df)), None)

Это заменит все nans на None, никаких других модификаций не требуется.

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